从excel导入时创建列主键

问题描述 投票:0回答:3

我将访问文档从Excel导入Access,我需要第一列成为主键但不确定用于执行此操作的方法。

我的代码:

Public Sub ImportProtected(strFile As String, _
strPassword As String)
Dim oExcel As Object, oWb As Object
Set oExcel = CreateObject("Excel.Application")
Set oWb = oExcel.Workbooks.Open(FileName:=strFile, _
Password:=strPassword)
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel9, "_tmp_table", strFile, -1
oWb.Close SaveChanges:=False
oExcel.Quit
Set oExcel = Nothing
End Sub

我使用以下代码调用代码:

ImportProtected "C:\Daves Work\Projects\ID.xlsm", "1234"

所有导入都很好,但我需要第一列成为主键,并在显示数据的行中有数字1,2,3,4等。

救命

ms-access access-vba ms-access-2010
3个回答
0
投票

只需使用主键将数据导入现有表,或者更好 - 导入临时表,然后验证导入的数据,然后使用主键将有效数据从临时表复制到工作表。

您还可以在导入后使用VBA创建主键

UPDATE

错过了密码保护要求,删除了部分答案。

如果标题更改或丢失,请使用HasFieldNames参数= false导入临时表,然后分析第一行以提取密钥名称(如果需要),然后使用查询开始第二行将数据复制到工作表中。


0
投票

如果要导入的数据定义良好 - 也就是说,您知道列名,列顺序和数据类型 - 那么最好导入已定义主键的现有表。您可以将其与首先从表中删除任何现有(先前)数据的步骤相结合。

否则,您将需要对表定义(TableDefs)使用Access VBA到CreateIndex(并设置其Primary属性)。 Example


由于列标题不可用,或者无法依赖,并且因为您需要使用Excel Automation来打开文件,所以我首先使用自动化来插入和创建标题行;保存文件,然后导入到预定义的Access表中。例如:

Range("A1:D1").Value = Array("ID", "SecondField", "ThirdField", "Fourth")

这假设至少可以计算列顺序和数据类型?!否则,无论如何都需要更多的工作来操纵数据。


0
投票

您还可以通过以下代码添加主键

DoCMD.RunSQL "ALTER TABLE " & tablename & " ADD Column ID COUNTER PRIMARY KEY"
© www.soinside.com 2019 - 2024. All rights reserved.