使用命令行将.CSV文件转换为.XLSX文件

13

我正在寻找一种批量使用命令行将一系列.csv文件转换为.xlsx的方法。

我尝试了许多不同的VBScripts,但它们似乎都是将.xlsx转换为.csv而不是相反。

以下是我能找到的最接近的一个,但它仍然是将.xlsx转换为.csv

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
    Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

有任何想法吗?

5个回答

20

免责声明:我已在https://gitlab.com/DerLinkshaender/csv2xlsx上作为开源代码编写了CSV2XLSX。

你可能想尝试像上面那样的外部工具。 为什么呢?

优点:

  • 即使Windows脚本宿主被阻止,也可以使用。
  • 独立于操作系统,因此您可以在每个操作系统上使用一个熟悉的工具和相同的选项集(节省大脑内存 :-))。
  • 无需安装Excel或LibreOffice等软件,因此您不必担心安装其他模块或语言。
  • 将几个CSV参数指定为命令行参数,使该工具“SysAdmin-friendly”,因为他们不必查看源代码。
  • 您甚至可以指定csv数据的行或列范围。
  • xlsx文件格式非常复杂,不借助安装办公套件的话,编写它并不是件轻松的事情。
  • 更适合批处理,因为该工具可以集成到特定于操作系统的循环逻辑中。
  • 我试图提供一组有用的命令行标志,以便于开发运维/系统管理员考虑,许多现有的脚本缺乏通过命令行选项进行良好控制。

提供链接也可以,尽量解释这将如何解决问题。抱歉,由于我是一个语言模型,我无法推断出您所指的特定内容。请提供具体的英文内容以供翻译。 - Arun Vinoth-Precog Tech - MVP
@ArunVinoth - 谢谢,现在好了吗?我是SO的新手。 - Arminius
经过几次测试,似乎运行良好。这是我制作的两行批处理文件,可通过简单的拖放转换文件:csv2xlsx_amd64.exe -colsep ";" -sheet "data" -outfile "%1.xlsx" -infile "%1" pause。结果可能看起来有点丑(我希望有一个字体参数来设置 Tahoma 而不是 Verdana),但它似乎做得很好。性能也还可以。不是非常快,但我不会称其为慢。我只遇到了一个(非常愚蠢的)问题:尝试使用“-noheader yes”,而 noheader 不使用参数,导致错误(输入文件不存在)。 - Balmipour
2
@Balmipour 我增强了这个工具。现在有字体名称、字体大小以及通配符/批量处理的文件掩码选项,还支持除UTF-8之外的其他编码。 - Arminius
2
@user121391,现在可以使用其他编码方式了,请查看新版本。 - Arminius

10

唯一的前提条件是文件名中的“ .csv ”必须为小写:

Dim file, WB

With CreateObject("Excel.Application")
    On Error Resume Next
    For Each file In WScript.Arguments
        Set WB = .Workbooks.Open(file)
        WB.SaveAs Replace(WB.FullName, ".csv", ".xlsx"), 51
        WB.Close False
    Next    
    .Quit
End With

WScript.Echo "Done!"

我在命令行中使用单个 .csv 文件作为参数启动它,但它只是显示“完成”而没有任何反应。 - crackruckles
你有向它传递参数吗?你是通过CMD调用脚本,还是直接拖放使用? - SierraOscar
我已经让你的方法工作了,我只需要传递绝对路径而不仅仅是文件名。感谢你的帮助。 - crackruckles
1
使用 Replace(WB.FullName, ".csv", ".xlsx", 1, -1, vbTextCompare),您无需担心大小写问题。或者使用 Replace(LCase(WB.FullName), ".csv", ".xlsx") - Bond
@ Bond 不错的建议,不过我避免使用 LCase(),因为输出文件名会变成全小写。我知道这有点迂腐,但是无妨... - SierraOscar
1
@Andrew 不太清楚你指的是什么?这里使用 Excel 中的 ".SaveAs" 方法将文件另存为 CSV 格式 - 不只是重命名文件,这显然行不通。你所指出的示例也不是可以在命令行中运行的脚本。 - SierraOscar

1

1
这是一个我使用NPOI库创建的开源工具,适用于Windows机器,可以将简单的分隔文件转换为XLS/XLSX格式,无需在机器上安装Excel。如果您不想自己构建,二进制文件位于Bin/Debug中。所有必要的库都包含在可执行文件中,因此它可以独立运行。

https://github.com/nmolinos/csv2excel


0
你是在使用Windows还是Linux/Mac操作系统?
无论哪种操作系统,我都可能有解决方案。
以下是不需要下面所注释的程序即可解决你问题的解决方案:

https://social.msdn.microsoft.com/Forums/en-US/74df1378-7c0c-4c0f-b174-fa97a5c2969b/convert-csv-to-xlsx?forum=Vsexpressvb

编辑 这里是基本解决方案:

基本上,您可以从文件所在的目录中应用筛选器(在此情况下为xlsx筛选器)。

抱歉,我刚刚看到您正在使用Windows系统 ./directory --headless --convert-to xlsx:"Calc MS Excel 2007 XML" file.csv

在这种情况下,“Calc MS Excel 2007 XML”是筛选器。

这适用于单个文件,让我再添加一下批处理。


抱歉,我应该提到是Windows系统。 - crackruckles
试试这些吧,它们是Windows上有用的转换工具http://www.dbf2002.com/csv-converter/commandline.htmlhttp://www.softinterface.com/Convert-XLS/Features/Convert-CSV-To-XLSX.htm - Robert Melikyan
我已经尝试了这两种方法,但它们都会将它们转换错误,并在我尝试使用SSIS将它们导入到我的SQL数据库时导致错误,但是如果我通过Excel手动操作,则可以完美地运行。 - crackruckles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接