连接string将所有值作为文本传递

我正在努力将数据从带有标题行的文本文件导入到Excel表格中

文本文件中的值由制表符分隔,因此我必须创build与文本文件保存在同一文件夹中的Schema.ini文件:

[test no1.txt] ColNameHeader=True Format=TabDelimited MaxScanRows=0 Col1="Column number 1" Float Col2="Column number 2" Text Col3="Column number 3" Text 

我正在从文本文件中select所有值到logging集中。 然后,我使用这个连接string来打开目标excel:

 Public Function getXlsConn() As ADODB.Connection Dim rv As New ADODB.Connection Dim strConn As String strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & targetFileName & ";" & _ "Extended Properties=""Excel 12.0;HDR=YES;IMEX=0"";" rv.Open strConn Set getXlsConn = rv End Function 

我得到目标logging集(范围在Excel表),我循环所有行源logging集(数据从文本文件),并将其传递到目标logging集。 在循环的最后,我使用UpdateBatch命令更新目标logging集:

 Sub CopyToXls(pRecordSet As ADODB.Recordset, pSheetName As String) Dim con As ADODB.Connection, rs As ADODB.Recordset Dim i As Long Dim size As Integer Dim fieldsArray() As Variant Dim values() As Variant Set con = getXlsConn() Set rs = New ADODB.Recordset rs.CursorLocation = adUseServer 'header starts from 2nd row rs.Open "select * from [" & pSheetName & "$A2:C600000]", con, _ adOpenDynamic, adLockOptimistic 'get number of columns and their names size = rs.Fields.Count - 1 ReDim values(size) ReDim fieldsArray(size) For i = 0 To size fieldsArray(i) = rs.Fields(i).Name Next i 'get end of file If rs.EOF = False Then rs.MoveFirst End If 'copy rows from source recordset (text file) to target recordset (excel sheet) Do Until pRecordSet.EOF = True For i = 0 To size values(i) = pRecordSet.Fields(i).Value Next i rs.AddNew fieldsArray, values pRecordSet.MoveNext rs.MoveNext Loop rs.UpdateBatch rs.Close Set rs = Nothing Set con = Nothing End Sub 

不幸的是,所有的值作为文本传递 ,因此第一列的SUM函数(位于A1单元格中)不起作用。

我试图改变连接string的IMEX参数 – 对于值1和2我得到错误“无法更新。数据库对象是只读的”。

我想按照我在Schema.ini文件中定义的那样传递值。 这可能吗?

以下是连接到文本文档的一般方法。

我的示例文本文件如下所示:

 1,a,b 1,a,b 1,a,b 1,a,b 

为了简单起见,我只是用逗号分隔符。

这是我正在使用的代码。 一个特别的注意事项,如果你有一个不同的分隔符,你需要改变分隔符types。 我已经注意到了这段代码。

 Public Sub OutputToExcel() Dim mySheet As Worksheet: Set mySheet = ThisWorkbook.Sheets("Sheet1") Dim FolderPath As String: FolderPath = "C:\Users\Megatron\Desktop\" Dim SQL As String: SQL = "SELECT CDbl(F1) as Field1, " & _ "Cstr(F2) as Text1, CStr(F3) as Text2 " & _ "FROM MyFile.txt" Dim myRs As ADODB.Recordset: Set myRs = New ADODB.Recordset Dim conn As ADODB.Connection: Set conn = New ADODB.Connection 'Change the FMT=Delimited to FMT=TabDelimited, 'or continue using the schema.ini which I prefer Dim connstr As String: connstr = "Provider=Microsoft.Ace.OLEDB.12.0;" & _ "Data Source=" & FolderPath & _ ";Extended Properties='text;HDR=No;FMT=Delimited';" 'Open a connection With conn .connectionstring = connstr .Open End With 'Read the data myRs.Open SQL, conn, adOpenForwardOnly, adLockOptimistic 'Output the data mySheet.Range("A1").CopyFromRecordset myRs 'Clean Up If myRs.State = adStateOpen Then myRs.Close: Set myRs = Nothing If conn.State = adStateOpen Then conn.Close: Set conn = Nothing End Sub