使用命令行

时间:2016-09-04 06:40:49

标签: vb.net excel windows csv vbscript

我有一个像这样的.xlsx文件:

sample.xlsx:

Heading     C1      C2,01,02    C3    C4
R1          1       4           7     10
R2          2       5           8     11,1
R3          3       6           9,0   12

我想将sample.xlsx文件转换为Output.csv文件[管道分隔]。

请注意,我不想要任何双引号“C2,01,02”。

Output.csv:

Heading|C1|C2,01,02|C3|C4
R1|1|4|7|10
R2|2|5|8|11,1
R3|3|6|9,0|12

我知道如何使用以下手动步骤生成Output.csv:

转到控制面板 - >地区和语言 - >其他设置 - >使用管道“|”更新列表分隔符字段。

打开sample.xlsx - >另存为 - >从下拉列表中选择另存为CSV(逗号分隔)(* .csv)。

但我不想手动执行此操作。我想使用命令行实现相同的输出。为此,我参考了这篇文章: Convert XLS to CSV on command line

代码是:

这个csv工作正常但唯一的问题是它产生逗号分隔的csv而不是管道分隔。

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If
csv_format = 6
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.SaveAs dest_file, csv_format
oBook.Close False
oExcel.Quit

运行以上代码:

XlsToCsv.vbs [sourcexlsFile] .xls [输出] .csv

我尝试使用许多其他值更改csv_format = 6的值,例如1,2,3 ......等等。但它没有给管道分开的csv。

请帮忙。

提前致谢。

2 个答案:

答案 0 :(得分:2)

Python解决方案。使用python 3.4和标准模块除了openpyxl:

安装openpyxl:

cd /D C:\python34
scripts\pip install openpyxl

当然xlsx文件必须只有1张。公式未经评估,这是主要限制。

空行也被过滤掉了。

import openpyxl,csv,sys
if len(sys.argv)<3:
   print("Usage xlsx2csv.py file.xlsx file.csv")
   sys.exit()

i = sys.argv[1]
o = sys.argv[2]


f = open(o,"w",newline='')
cw = csv.writer(f,delimiter='|',quotechar='"')

wb = openpyxl.load_workbook(i)
sheet = wb.active
for r in sheet.rows:
    row = [c.value for c in r]
    if row:
        cw.writerow(row)
f.close()

用法:xlsx2csv.py file.xlsx file.csv

答案 1 :(得分:1)

如果您正在运行脚本,请更好地扩展它:

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.SaveAs dest_file, 3
oBook.Close False
oExcel.Quit
Set objFile = objFSO.OpenTextFile(dest_file, 1)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, " ", "|")
Set objFile = objFSO.OpenTextFile(dest_file, 2)
objFile.WriteLine strNewText
objFile.Close