代码之家  ›  专栏  ›  技术社区  ›  usersam

将CSV数据写入Excel文件

  •  0
  • usersam  · 技术社区  · 7 年前

    我正在尝试读取一个以分号分隔的CSV文件,并将其数据逐个单元格写入Excel文件。

    我的CSV数据如下:

    CATALOG;NAME   ;TYPE
    ---;---;---
    test   ;Mapping   ;BASE
    test   ;RECEPIENT    ;BASE  
    

    我正在尝试使用下面的VBScript代码将此数据附加到Excel中。

    Set objShell = WScript.CreateObject ("WScript.Shell")
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open(objShell.CurrentDirectory & "\" & "Data.xlsx")
    
    'objExcel.Application.Visible = True
    Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
    LastRow = objSheet.UsedRange.Rows.Count
    WScript.Echo "LastRow "&LastRow
    
    'objExcel.Cells(LastRow+1, 1).Value = "Test value"
    
    Set objFileToRead = CreateObject("Scripting.FileSystemObject").OpenTextFile(objShell.CurrentDirectory & "\" & "Output.csv",1)
    Dim strLine
    Do While Not objFileToRead.AtEndOfStream
        strResults = objFileToRead.ReadAll
    Loop
    objFileToRead.Close
    Set objFileToRead = Nothing
    
    If Trim(strResults) <> "" Then
        ' Create an Array of the Text File
        arrline = Split(strResults, vbNewLine)
        'WScript.Echo UBound(arrline)
    End If
    
    For i = 0 To UBound(arrline)
        Do
            If i = 1 Then Exit Do
    
            If arrline(i) = "" Then
                ' checks for a blank line at the end of stream
                Exit For
            End If
    
            ReDim Preserve arrdata(i)
            arrdata(i) = Split(arrline(i), ";")
    
            For j = 0 To UBound(arrdata(i))
                WScript.Echo Trim(arrdata(i)(j))
                'objExcel.Cells(LastRow+1+i,j).Value = Trim(arrdata(i)(j))
            Next
        Loop While False
    Next
    
    objExcel.ActiveWorkbook.Save
    objExcel.ActiveWorkbook.Close
    
    objExcel.Application.Quit
    WScript.Echo "Finished."
    WScript.Quit
    

    它显示csv数据,但抛出错误

    Execl.vbs(41,6)Microsoft VBScript运行时错误:未知运行时错误

    objExcel.Cells(LastRow+1+i,j).Value = Trim(arrdata(i)(j))
    

    如果我把一些硬编码值(5,6….)放在 j j型 作为变量。我不能把任何价值 j型 因为输入CSV中的列数未知。请让我知道我在哪里犯了错误以及如何解决它。

    1 回复  |  直到 7 年前
        1
  •  1
  •   elliot svensson    7 年前

    我敢打赌,问题在于循环遍历从错误索引0列开始的列。请尝试调整此行:

        For j = 0 To UBound(arrdata(i))
    

    成为

        For j = 1 To UBound(arrdata(i))