我使用Excel文件作为数据库,我想将ID列设置为主键,并在数据库中插入新记录时自动递增该列的值。
你不能。 Excel 不是数据库管理系统。
您可以使用 MS Access 轻松地在 Excel 中复制和粘贴,甚至设置计划导入,大多数(如果不是全部)Windows 版 MS Office 都附带了 MS Access。这将为您提供您正在寻找的 DBMS 特定功能。
只需在 Access 中创建一个表,保留第一列
ID
不变,然后在其他列中粘贴/导入数据。 ID
列默认已经有PK和自动增量了。
您还可以使用更“完整”的免费 DBMS,例如 MS SQL Server Express、MySQL 或 PostgreSQL。
根据上面的评论,Excel 不是执行此操作的工具,但是,如果您愿意,您可以添加一个论坛来执行此操作。 查看这篇文章
以下是使用 Excel 自定义验证创建主键以防止 Excel 单元格中出现重复条目的步骤。
1)选择整个空列(没有输入的列)。
2) 转到数据>>数据验证
3) 从允许下拉列表中选择自定义
4) 将
=COUNTIF($A:$A,A1)=1
粘贴到公式字段中。
现在,您的列设置了主键,这意味着从 A1 开始到 A 列的整个范围的每个单元格仅允许唯一值,如下所示。
所以现在如果您想在该 Excel 单元格中放入两个相同的值,则会出现以下错误:-
编辑:- 使用 Excel 列的标题选择行。请参见下图中的红圈,单击此处选择 Excel 中的整列。然后从上述步骤的第2步开始进行操作
我只能通过自动增量来帮助你;)
看一下下面的 VBScript 代码,只需运行 SELECT 找出 ID 列的最后一个值,然后运行另一个 SQL 命令以使用 (LastValue+1) 插入新行。
Dim Conn, RS
Set Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""D:/YourFile.xlsx"";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=0;"";" 'Use "IMEX=0" to be able to UPDATE.
Conn.Open
Set RS = Conn.Execute("SELECT MAX([Id]) AS LastID FROM [Sheet1$A1:E10] ")
Conn.Execute("INSERT INTO [Sheet1$A1:E10] ([Id], [Field1], [FieldN]) VALUES ('" & CStr(Abs(RS("LastID")) + 1) & "', 'Some value', 'Another value')")
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing
我正在利用 Excel 的表格格式并将其与
的建议结合起来
@马蒂厄·吉登
@HaveNoDisplayName
@贝尔戈·德·阿尔梅达
您可以通过主页>格式化为表格将数据设置为表格。 像这样,任何公式都会自动填充到表底部的任何新条目。
现在您可以按照 @Mathieu Guindon 的建议设置主键:
=ROW()-1
或者,如果您想要一个更神秘的密钥,您可以使用随机数,如 @Bergo de Almeida 所希望的那样:
=RAND()
但是,使用它作为主键,需要您将公式计算设置为手动,因为即使您不编辑相关单元格,该功能也会自动更新随机数。 为此,您必须将“公式”>“计算选项”设置为:
Manual
此外,如果 Excel 多次生成相同的随机数,您可以应用 @HaveNoDisplayName 建议的验证规则来引发错误。
这是公式的另一种语法 - 有时逗号和分号会造成混淆:
=COUNTIF($A:$A;A1)=1
我想,如果 MS-Excel 能够生成随机数并将其固定在单元格上,那就太好了。就像,如果我可以修复一个随机数加上 now() 公式的结果作为连接文本,问题就会得到解决。我看到了一些在 VBA 上做到这一点的提示,但并不是真正按照伙伴要求的那样。