Microsoft Access Insert Into Statement Selecting Data from Excel --- 字段是 Int 和 Text 的混合

Microsoft Access Insert Into Statement Selecting Data from Excel --- Field is Mixed Int and Text

我正在尝试对 Excel 文件中的 select 数据使用 Insert Into 查询,并将其插入到 Access table 中。我遇到的问题是 Excel 列之一可以是字母、数字或两者。我想 select 数据作为文本,但我似乎只得到文本和 text/number 条目的空白。如果我对 Excel 文件进行排序,使文本项位于第一行,则所有数据都会被转换。 我尝试了以下方法:

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _
    "SELECT [TIMS Company Code] " & _
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$];"

============================================= ============================

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _
    "SELECT CStr([TIMS Company Code]) " & _
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$] " & _
    "WHERE [TIMS Company Code] IS NOT NULL;"

============================================= ============================

strSQL = "INSERT INTO tblImport ([TIMS Company Code]) " & _
    "SELECT (CAST([TIMS Company Code]) AS TEXT) " & _
    "FROM [Excel 8.0;HDR=YES;DATABASE=" & xlPath & "].[Manual Entry$];"

我也研究了一个叫做 "schema.ini" 的东西,但它似乎有点让我头疼。

我很感激任何人可以提供的帮助。

贾森

经过更多的研究,我学到了很多,但没有找到解决方案。对于任何在这条路上跌跌撞撞的人来说,以下是一些值得了解的事情:

  • 出现此问题是因为 Access 查看前 8 行并根据它来决定数据类型
  • 您可以向连接字符串中添加一些内容,但如果前 8 行是整数并且后面有文本值,则其中 none 会有所帮助
  • 如果前 8 中至少有 1 行文本,
  • IMEX=1 将起作用
  • 您可以调整注册表设置以查看比前 8 个更多的内容,方法是:[HKLM\Software\Microsoft\Jet.0\Engines\Excel
  • 我无法从 VBA 中找到更改注册表设置的方法,但如果您使用 C#.Net,则完全有可能
  • 关于此主题的大部分信息都是关于 Microsoft SQL 服务器的,但仍然有用
  • 这是我找到的最有用的网站 link:https://yoursandmyideas.wordpress.com/2011/02/05/how-to-read-or-write-excel-file-using-ace-oledb-data-provider/

正如您所发现的,Access 试图提供帮助,并根据前 8 行猜测数据类型。

有两种解决方法:

  1. 在顶部添加一行虚拟文本 - 阅读时将其丢弃
  2. 将文件保存为 CSV,并使用保存的导入规范