Vbscript将CSV导入到Excel中

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

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 

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 

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


如果你不知道如何做到这一点,那么VBA是最好的方法,但你也应该能够用VBScript来模拟它。 这是我认为应该看起来像,虽然我不能testing确定:

 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