【发布时间】:2016-05-19 09:16:20
【问题描述】:
我使用 ADODB 将数据从 Excel 文件提取到另一个 Excel 文件而不打开源代码。我强烈怀疑我的连接不接受IMEX=1 参数。我这样开始我的连接:
con1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & sFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
所以我明确声明我希望使用IMEX=1,但我发现它不起作用,尽管它存在于连接属性树中:
最小、完整且可验证的示例
1. 创建一个文件C:/Temp/Source.xlsx,您应该在其中输入这 9 个值:
保存并关闭此文件。
2. 将以下代码粘贴到应具有名为“Sheet1”的工作表的任何其他(新)工作表中并运行它:
Sub PullData()
Dim con1 As Object
Dim rst1 As Object
Dim sFile As String
Dim x As Long, Y As Long, Xupper As Long, Yupper As Long
Dim arrData() As Variant, arrTransp() As Variant
Dim rngTargStart As Range
Set con1 = CreateObject("ADODB.Connection")
Set rst1 = CreateObject("ADODB.Recordset")
sFile = "C:\Temp\Source.xlsx"
con1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & sFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
'pulling
rst1.Open "SELECT * FROM [Sheet1$A1:A9];", con1, 3, 1
x = rst1.RecordCount '.GetRows sometimes yields "Record is too large". This line fixes it.
arrData = rst1.GetRows
rst1.Close
'transposing
Xupper = UBound(arrData, 2)
Yupper = UBound(arrData, 1)
ReDim arrTransp(Xupper, Yupper)
For x = 0 To Xupper
For Y = 0 To Yupper
arrTransp(x, Y) = arrData(Y, x)
Next
Next
'updating worksheet
Set rngTargStart = ThisWorkbook.Sheets("Sheet1").Range("A1")
rngTargStart.Resize(UBound(arrTransp, 1) + 1, UBound(arrTransp, 2) + 1).Value = arrTransp
con1.Close
Set con1 = Nothing
Set rst1 = Nothing
End Sub
运行后我得到了这个:
知道为什么,以及如何解决吗?我将非常感谢任何 cmets。
完整的con1.connectionstring 如下所示:
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Temp\Source.xlsx;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path ="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:不要在 Compact=False 上复制区域设置;Jet OLEDB:Compact without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False;
我在 Windows 7 64 位上使用 Office Pro Plus 2013 32 位。
【问题讨论】:
标签: excel vba connection-string oledb adodb