【问题标题】:Make a column primary key when importing from excel从excel导入时制作列主键
【发布时间】:2018-01-15 10:07:45
【问题描述】:

我正在将访问文档从 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 vba ms-access-2010


    【解决方案1】:

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

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

    更新

    缺少密码保护要求,已删除部分答案。

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

    【讨论】:

    • 我认为首先打开文件是workaround,因为文件有密码。
    • 谢谢 - 我已经按照您提到的方式导入,但遇到了同样的问题。 excel 文档有一个标题,每天都会更改,因此需要以某种方式将其设为主键,以便我可以计算列数
    • 我会考虑的,谢谢 - 我认为有点超出我的能力,但必须试一试
    • @Andy G,感谢您的介绍,错过了这个。编辑了答案
    • 只是一个建议,也许它可以提供帮助。很多时候,我不得不将数据从 Excel 导入 Access。我用的方法和你一样。它对我来说更好的是创建一个模板工作簿,其中包含我的表格标题和相同格式。通过这种方式,我确保导入的数据与我的字段格式相同。要创建此工作簿,我在 Access 中将表格导出到 Excel,删除除标题之外的所有数据并将其保存为空白。导出的工作簿将成为我的模板。使用 VBA,我只需调用 thsat 工作簿,将值粘贴到工作簿中,保存它,然后将其导入 Access。
    【解决方案2】:

    如果您要导入的数据定义明确——也就是说,您知道列名、列顺序和数据类型——那么最好导入到已经定义了主键的现有表中。您可以将此与首先从表中删除任何现有(先前)数据的步骤结合使用。

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


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

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

    这假设至少可以依靠列顺序和数据类型?!否则,无论如何都需要做更多的工作来处理数据。

    【讨论】:

    • 遗憾的是,导入的文件定义不明确,我们无法对其进行更改。 A1 列每天更改为唯一 ID,其他列根本没有标题。
    【解决方案3】:

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

    DoCMD.RunSQL "ALTER TABLE " & tablename & " ADD Column ID COUNTER PRIMARY KEY"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2021-12-31
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多