Я использую ADODB для извлечения данных из файла Excel в другой файл Excel без открытия источника. У меня есть сильное подозрение, что параметр IMEX=1
не принят в моей связи. Я начинаю мое соединение, как это: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. Вставьте следующий код в любом другом (новом) листе, который должен иметь лист с именем «Лист1» и запустить его:
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
После его выполнения я получаю это:
Любая идея, почему и как ее исправить? Буду очень благодарен за любые комментарии.
Полный con1.connectionstring
выглядит следующим образом:
Provider = Microsoft.ACE.OLEDB.12.0; ID пользователя = Admin; источник данных = C: \ Temp \ Source.xlsx; Mode = Поделиться Deny None; Jet OLEDB: System database = ""; Jet OLEDB: путь к реестру = ""; Jet OLEDB: пароль базы данных = ""; Jet OLEDB: тип двигателя = 37; Jet OLEDB: режим блокировки базы данных = 0; OLEDB: глобальный частичный объем Ops = 2; Jet OLEDB: глобальные массовые транзакции = 1; Jet OLEDB: новая база данных Password = ""; Jet OLEDB: создание системной базы данных = False; Jet OLEDB: шифрование базы данных = False; Jet OLEDB: не копировать локаль на компактном = False; Jet OLEDB: компактный без восстановления реплик = False; Jet OLEDB: SFP = False; Jet OLEDB: поддержка сложных данных = False; Jet OLEDB: обход UserInfo Validation = False; Jet OLEDB: ограниченный DB Cac hing = False; Jet OLEDB: Bypass ChoiceField Validation = False;
Я использую Office Pro Plus 2013, 32-разрядный в Windows 7, 64-разрядный.