У меня есть некоторые данные aphanumeri c в листе Excel закрытой рабочей книги Excel с именем temp.xlsx
. Я создаю запрос ADODB Recordset
через SQL из VBA, чтобы включить этот диапазон в мою текущую рабочую книгу.
Проблема в том, что некоторые заголовки столбцов на листе имеют длину более 64 символов. Это приводит к тому, что имена столбцов усекаются до 64 символов, когда я импортирую их в набор записей ADO.
Public Const adCmdText = 1
Public Const adOpenDynamic = 2
Public Const adUseServer = 2
Public Const adOpenStatic = 3
Public Const adUseClient = 3
Public Const adLockBatchOptimistic = 4
Public Const adTypeBinary = 1
Public Const adTypeText = 2
' Dim oStream As Object
' Dim oCmd As Object
Dim oCon As Object
Dim oRS As Object
Dim strSQL As String
Dim strFilePath As String
' Set oStream = CreateObject("ADODB.Stream")
' Set oCmd = CreateObject("ADODB.Command")
' Set xlXML = CreateObject("MSXML2.DOMDocument")
' Set XL = GetObject(, "Excel.Application")
' Set WB = XL.ActiveWorkbook
' xlXML.LoadXML Replace(WB.Sheets("Sheet1").Cells(1, 1).CurrentRegion.value(xlRangeValueMSPersistXML), "rs:name="" ", "rs:name=""") 'xlRangeValueXMLSpreadsheet
' oRS.Open xlXML, CursorType:=adOpenStatic, LockType:=adLockBatchOptimistic
Set oCon = CreateObject("ADODB.Connection")
Set oRS = CreateObject("ADODB.Recordset")
strFilePath = ThisWorkbook.Path & Application.PathSeparator & "temp1.xlsx"
With oCon
.Provider = "Microsoft.Ace.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0; HDR=Yes;IMEX=1;"
.CursorLocation = adUseClient
.Open strFilePath
End With
strSQL = "SELECT * FROM [Sheet1$]"
With oRS
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockBatchOptimistic
.activeconnection = adoCon
.Open (strSQL)
End With
End Sub
Существует ли альтернативный метод, обеспечивающий импорт символов полного имени столбца в набор записей ADO из закрытая книга Excel? Можно ли преодолеть ограничение в 64 символа для полей?
Может ли объект ADO.STREAM
выполнять работу, поддерживая имена столбцов? MSXML2.DOMDocument.Load
или MSXML2.DOMDocument.LoadXML
справятся?
Любая помощь будет наиболее ценной.