在VBScript中将.csv文件转换为Excel

时间:2013-04-03 12:28:56

标签: excel csv vbscript delimited-text


我正在编写一个程序,将.csv文件转换为VBScript中的Excel文件。

这是我的.csv文件的一部分(它也有一个标题)

  

报告标题,商品性能特征报告,报告   标题,商品性能特征报告,,,,,,,开始   日期,8/7/2012 ,,,,,,,,,,模板   名称,XXXX-Test-VVV-Two-Positions ,,,,,,,,,,总计   制作,,,,,,,,,,,

     

,ID,名称,产品描述,发行日期,产品类型,重量   (kg),重量(磅),价格,产品体积,利润,总价值(000)   ,315616102,Lux Honey,Body   Wash,8/1/2012,C,0.06,0.06,93,793920,0,7455703038,579780206,Clear   AntiDandruf,洗发水,8/1/2012年,C,0.06,0.06,60.5,1325980,2.05,8022179000   ,761713106,Loreal Divine,Face   Crub,8/1/2012年,楼0.12,0.12,46.52,3314780,5.07,15420356560

这是我为转换编写的更新的 VBScript代码。

Dim xlApp, workBook1, workBook2,aSheets, fileName, aInfo2,aInfo1,oExcel
  Const XlPlatform = "xlWindows"
  Const xlDelimited = 1
  Const xlTextQualifierDoubleQuote = 1
  Const xlTextFormat = 2
  Const xlGeneralFormat = 1


  Set oExcel = Sys.OleObject("Excel.Application")  
  Set xlApp = CreateObject("Excel.Application")  

  Set workBook1 = xlApp.ActiveWorkBook

  Set workBook1 = xlApp.WorkBooks.OpenText("Y:\Personal Folders\XXXX\TestFile1.csv",XlPlatform, 1, xlDelimited, xlTextQualifierDoubleQuote, true, false, false, true, false, true, "CRLF", Array(Array (1,2),Array (2,2),Array (3,2),Array (4,1),Array (5,2),Array (6,1),Array (7,1),Array (8,1),Array (9,1),Array (10,1),Array (11,1)), true, false)

  Set workBook1 = xlApp.ActiveWorkBook
  xlApp.Visible = true

  workBook1.Save "Y:\Personal Folders\XXXX\x.xlsx", xlNormal
  workBook1.Close

但是Excel文件中的数据不是表格形式。我想以表格形式显示数据。

任何人都可以请我帮助我根据delimeters提取数据。我也需要excel文件中的标题部分。

提前致谢

3 个答案:

答案 0 :(得分:3)

您更新的问题中的代码存在以下几个问题:

  • Const XlPlatform = "xlWindows"

    XlPlatform必须是数字值,而不是字符串。 enumerationxlWindows成员的值为2。但是,由于这是默认值,您可以在调用OpenText时忽略此值。

  • Set workBook1 = xlApp.ActiveWorkBook

    新生成的Excel实例没有活动工作簿,因此在实际打开或创建工作簿之前将其分配给变量是没有意义的。

  • Set workBook1 = xlApp.WorkBooks.OpenText(...)

    OpenText方法不返回对象,因此在上述语句中没有任何内容可以分配。

  • ...ooks.OpenText(..., true, "CRLF", ...)

    字符串"CRLF"不是字符。为什么要将换行符指定为分隔符?

  • ..., Array(...), true, false)

    您指定的最后两个参数是TextVisualLayout(指定从左到右/从右到左)和DecimalSeparator。它们都不是布尔值。如果您不确定是否需要它们,请简单省略它们。

  • workBook1.Save "Y:\Personal Folders\XXXX\x.xlsx", xlNormal

    Save方法以当前名称保存工作簿。要以不同的名称保存工作簿,您必须使用SaveAs方法。常量xlNormal未在代码中的任何位置定义。另外,xlNormal生成Excel 97/2003工作簿(.xls)。若要将工作簿另存为Excel 2007/2010工作簿(.xlsx),必须使用xlOpenXMLWorkbook常量。

以下代码对我有用:

Const xlDelimited                =  1
Const xlTextQualifierDoubleQuote =  1
Const xlOpenXMLWorkbook          = 51

Set xl = CreateObject("Excel.Application")

xl.Workbooks.OpenText "Y:\Personal Folders\XXXX\TestFile1.csv", , , xlDelimited _
  , xlTextQualifierDoubleQuote, True, False, False, True, False, False, _
  , Array(Array(1,2), Array(2,2), Array(3,2), Array(4,1), Array(5,2) _
  , Array(6,1), Array(7,1), Array(8,1), Array(9,1), Array(10,1), Array(11,1))
Set wb = xl.ActiveWorkbook

wb.SaveAs "Y:\Personal Folders\XXXX\x.xlsx", xlOpenXMLWorkbook, , , , False
wb.Close

xl.Quit

答案 1 :(得分:0)

我正在使用Excel 2003.以下是我指定.csv文件格式的代码

Set xl = CreateObject("Excel.Application")

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

来自Vbscript to import csv into excel

您可以解释以下行的功能吗?

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


我对上述.csv文件的OpenText属性的实现

Set workBook1 = xlApp.WorkBooks.OpenText("D:\Personal Folders\XXXX\TestFile1.csv", , ,xlDelimited, ,false ,false ,false ,True,false ,false ,"~")

答案 2 :(得分:-1)

您需要指定要保存的格式。以下将它指定为2003的标准.xls

    Workbooks.Open Filename:= _
    "D:\Personal Folders\XXXXX\TestFile1.csv"

    ActiveWorkbook.SaveAs Filename:= _
    "D:\Personal Folders\XXXXX\x.xls", FileFormat:=xlNormal

    ActiveWorkbook.Close

也可以尝试

ActiveWorkbook.SaveAs Filename:= _
    "D:\Personal Folders\XXXXX\x.xls", FileFormat:= 56