【问题标题】:Convert .csv file into Excel in VBScript在 VBScript 中将 .csv 文件转换为 Excel
【发布时间】:2013-04-03 12:28:55
【问题描述】:


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

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

报告标题,商品性能特征报告,,报告 标题,货物性能特征报告,,,,,,, 开始 日期,8/7/2012,,,,,,,,,, 模板 名称,XXXX-测试-VVV-二位,,,,,,,,,,,总计 作品,,,,,,,,,,,,

,ID,名称,产品描述,发行日期,产品类型,重量 (kg),重量 (lb),价格,产品体积,利润,总值 (000) ,315616102,力士蜂蜜,身体 洗,8/1/2012,C,0.06,0.06,93,793920,0,7455703038 ,579780206,清除 去头屑,洗发水,8/1/2012,C,0.06,0.06,60.5,1325980,2.05,8022179000 ,761713106,欧莱雅神,脸 Crub,8/1/2012,F,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文件中的数据不是表格形式。我想以表格形式显示数据。

谁能帮我根据分隔符提取数据。我也需要excel文件中的标题部分。

提前致谢

【问题讨论】:

    标签: excel vbscript csv


    【解决方案1】:

    更新后的问题中的代码存在几个问题:

    • 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
    

    【讨论】:

    • 非常感谢 Ansgar :) 这是有效的。再次感谢。你拯救了我的一天
    【解决方案2】:

    我使用的是 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 ,"~")
    

    【讨论】:

    • OpenText 是导入文本文件的方法。由于 VBScript 不支持命名参数,因此您必须以正确的顺序指定所有参数。但是,您可以省略希望保持默认值的参数值,也可以完全省略尾随默认值。 dataTypes 值是一个数组,用于定义每个导入列的格式。文件打开成功后,将创建的工作簿对象赋值给变量wb
    • Ansgar:非常感谢您的回复。我了解到 OpenText 属性有 12 个参数。但现在我收到一条错误消息,提示“无法获取 WorkBooks 类的 OpenText 属性”。请你知道原因吗?我用我的 OpenText 版本编辑了上面的脚本
    • 我在上面的帖子中包含了我对 OpenText 的实现。谢谢
    • OpenText 不返回工作簿对象,因此您必须在第二步中将工作簿对象分配给变量:xlApp.Workbooks.OpenText "...", ..., "~" : Set workBook1 = xlApp.ActiveWorkbook
    • 我仍然收到错误“无法获取 WorkBooks 类的 OpenText 属性”。
    【解决方案3】:

    您需要指定要保存的格式。以下将其指定为 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
    

    【讨论】:

    • 感谢您的回复。目前我使用的是 Excel 2003 (.xls)。如何在 Excel 2003 中指定数据格式..???
    • 试试更新的代码。已经有一段时间了,但我认为这就是它的完成方式。
    • 您的代码是 VBA,而不是 VBScript。命名参数在 VBScript 中不起作用。
    • 感谢重播。但我正在寻找 VBScript 实现。
    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2021-07-15
    • 2021-07-21
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多