Excel工作表通过ADODB不一致的行为导出到Access

当我通过ADODB将Excel电子表格导出到Access数据库时,我遇到了一个奇怪的行为。 Office版本是在Win7 64bit上运行的2013 32bit。 这些步骤是:

  1. 我创build了一个名为' test.accdb '的新Access文件,只有一个' orders '表和一个' OrderID '字段。 桌子是空的。

  2. 我创build了一个新的.csv文件orders.csv 。 稍后我会显示这个文件的内容和最终结果。

  3. 我有一个Excel插件与下面的macros:

    Public Sub updateAccess() Dim con As New ADODB.Connection Dim connectionString As String Dim rs As New ADODB.Recordset Dim sql As String Dim Filename As String Filename = Application.ActiveWorkbook.Path & "\test.accdb" connectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" & Filename connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Filename Call con.Open(connectionString) sql = "DELETE FROM orders" Call con.Execute(sql) sql = "INSERT INTO orders " & _ "SELECT * FROM [Excel 12.0 Xml;HDR=YES;DATABASE=" & _ ActiveWorkbook.FullName & "].[" & ActiveWorkbook.Sheets(1).Name & "$]" Set rs = con.Execute(sql) Call con.Close Set con = Nothing End Sub 
  4. 然后使用Excel打开order.csv文件,运行macros,然后使用Access打开test.accdb 。 根据csv文件的内容,输出不同的结果:

案例A

orders.csv:

 OrderID 1 A 

test.accdb,在'订单'表中:

 OrderID 1 A 

案例B

orders.csv:

 OrderID 1 A 3 

test.accdb,在'orders'表中

 OrderID <blank> 1 3 

案例C

orders.csv:

 OrderID 1 A 3 B C D 

test.accdb,在'orders'表中

 OrderID 1 3 A B C D 

为什么情况B失败?

我无法把头围住。 我试了两个司机,但没有运气。

带有Excel数据库的ADODB将从前16个logging中猜测字段types。 在这种情况下

 OrderID 1 A 3 

它会猜测数字字段types,因为数字是多数。

为了避免这种情况,您可以使用连接string中的IMEX参数,请参阅: https : //www.connectionstrings.com/excel/

所以用你的代码:

 ... sql = "INSERT INTO orders " & _ "SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=1;DATABASE=" & _ ActiveWorkbook.FullName & "].[" & ActiveWorkbook.Sheets(1).Name & "$]" Set rs = con.Execute(sql) ...