Vbscript将csv导入excel

时间:2012-10-18 18:59:33

标签: excel csv vbscript import

我想创建一个VBSript,它将打开不同行和列的csv,并从第4行第1列开始粘贴它们。到目前为止,我所写的内容很慢,并且有大量的列硬编码到其中。< / p>

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(wscript.Arguments(0))
objExcel.Visible = True
objExcel.Cells(1, 4).Value = wscript.Arguments(1)+" - "+wscript.Arguments(2)
objExcel.Cells(2, 4).Value = wscript.Arguments(3)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (wscript.Arguments(4))
cCount = 1
rCount = 4

Do While objTextFile.AtEndOfStream <> True
        arrUserRecord = split(objTextFile.Readline, ",")
        Do While cCount<213
            objExcel.Cells(rCount, cCount).Value = arrUserRecord(cCount-1)
            cCount=cCount+1
        Loop
        cCount=1
        rCount=1+rCount
Loop

2 个答案:

答案 0 :(得分:4)

Excel可以特别关注它所接受的“有效CSV”。我不得不多次诉诸以下事项:

Const vbFormatStandard = 1
Const vbFormatText     = 2
Const vbFormatDate     = 4

Const xlDelimited      = 1
Const xlDoubleQuote    = 1

' change according to number/type of the fields in your CSV
dataTypes = Array( Array(1, vbFormatText) _
  , Array(2, vbFormatStandard) _
  , Array(3, vbFormatText) _
  , Array(4, vbFormatDate) _
  )

Set xl = CreateObject("Excel.Application")
xl.Visible = True

xl.Workbooks.OpenText "input.csv", , , xlDelimited, xlDoubleQuote, False _
  , False, True, , , , dataTypes
Set wb = xl.ActiveWorkbook

答案 1 :(得分:1)

如果是有效的CSV文件,则Excel可以直接打开它。所以只需编写VBscript告诉Excel打开CSV文件,就像它是一个工作簿一样。然后,您可以将所需的数据从该工作簿复制到工作簿中。


如果您不知道如何执行此操作,那么VBA是最好的方法,但您也应该能够在VBscript中进行模拟。这是我认为它应该是什么样子,虽然我无法测试以确定:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(wscript.Arguments(0))
objExcel.Visible = True
objExcel.Cells(1, 4).Value = wscript.Arguments(1) + " - " + wscript.Arguments(2)
objExcel.Cells(2, 4).Value = wscript.Arguments(3)

Set objWorksheet = objWorkbook.ActiveSheet

Set objWbkCsv = objExcel.Workbooks.Open(wscript.Arguments(4))
Set objWksCsv = objWbkCsv.Worksheets(1)
Set objRangeSource = objWksCsv.UsedRange

cCount = objRangeSource.Columns.Count
rCount = objRangeSource.Rows.Count + (4 - 1)
Set objRangeDest = objWorksheet.Range(objWorksheet.Cells(4, 1), objWorksheet.Cells(rCount, cCount))

objRangeSource.Copy objRangeDest