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 行猜测数据类型。
有两种解决方法:
- 在顶部添加一行虚拟文本 - 阅读时将其丢弃
- 将文件保存为 CSV,并使用保存的导入规范
我正在尝试对 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 行猜测数据类型。
有两种解决方法:
- 在顶部添加一行虚拟文本 - 阅读时将其丢弃
- 将文件保存为 CSV,并使用保存的导入规范