1

我正在尝试将 Excel 导入 Access DB,由于类型转换失败,无法导入某些客户编号。它是 66,000 个条目中的 12 个条目。通常客户编号是一个数字,但这 12 个是字符串,如 ABCDEFT001。我尝试将表的字段设置为长文本或短文本,它们仍未导入(仅导入 ImportError 表)。你知道我还能尝试什么吗?非常感谢您!PS我正在尝试使用导入DoCmd.TransferSpreadsheet

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "Inv level", "Path/to/file.xlsb", True, "Sheetname!"
4

1 回答 1

2

此策略链接到 excel 文件,而不是直接导入它,然后从中选择数据并将任何需要它的字段转换为正确的数据类型。

Sub ImportFromExcel()
    Dim pathToFile As String
    Dim targetTableName As String
    Dim sql As String

    pathToFile = "C:\Path\To\File.xlsx"
    targetTableName = "ImportResults"

    '//create the link
    DoCmd.TransferSpreadsheet acLink, _
                              acSpreadsheetTypeExcel12, _
                              targetTableName, _
                              pathToFile, _
                              True '//This part only if the excel file has field headers


    '//import
    sql = "SELECT Field1Name, CStr(CustNumber) AS CustNumber, Field3Name INTO NewImportTable FROM " & targetTableName
    CurrentDb.Execute sql

    '//remove the link
    DoCmd.DeleteObject acTable, targetTableName
End Sub

***此代码的两个陷阱要注意:

1) 在运行此代码之前,您应该删除任何名为“NewImportTable”的表,否则您将收到“表已存在”错误。

2)如果在Sub删除链接之前发生任何错误,下次运行时会出现问题,因为它将创建一个名为“ImportResults1”的链接,因为“ImportResults”仍然存在。真正可怕的是这里不会抛出任何错误。它将创建“ImportResults1”,然后在“ImportResults”上运行您的 sql!

于 2020-04-06T18:46:54.343 回答