【问题标题】:Convert xlsx file to csv using batch使用批处理将 xlsx 文件转换为 csv
【发布时间】:2011-07-12 12:29:06
【问题描述】:

如何使用批处理脚本将多个 xlsx 文件转换为 csv 文件?

【问题讨论】:

  • @ocasoprotal,接受答案。这行得通!
  • @Brian 嗯?我不是原始发帖人,因此我无法接受答案。我只是重提了这个问题。 @Ankur 必须接受答案。
  • @Swampape 的回答效果很好。如果 OP 可以标记答案会很好。
  • in2csv 是工具

标签: excel csv batch-file xlsx


【解决方案1】:

您需要一个外部工具,例如:SoftInterface.com - Convert XLSX to CSV

安装后,您可以在批处理中使用以下命令:

"c:\Program Files\Softinterface, Inc\Convert XLS\ConvertXLS.EXE" /S"C:\MyExcelFile.xlsx" /F51 /N"Sheet1" /T"C:\MyExcelFile.CSV" /C6 /M1 /V

【讨论】:

  • 声明“命令行功能不够强大,无法将 xlsx 转换为 csv。”应该删除(不正确),并且“您需要一些外部工具”应该替换为“您可以使用”等。例如,请参见@marbel here 的回答(但还有其他解决方案)。
【解决方案2】:

为了跟进 user183038 的回答,这里是一个 shell 脚本,用于将所有 xlsx 文件批量重命名为 csv,同时保留文件名。运行前需要安装 xlsx2csv 工具。

for i in *.xlsx;
 do
  filename=$(basename "$i" .xlsx);
  outext=".csv" 
  xlsx2csv $i $filename$outext
done

【讨论】:

    【解决方案3】:

    试试in2csv

    用法:

    in2csv file.xlsx > file.csv
    

    【讨论】:

    • 这可能有用,但不适合我。我严格地将我的操作系统与应用程序分开。我编写的至少一个大型应用程序在生产 2 年后失败了,需要每月维护才能与库保持同步。
    【解决方案4】:

    添加到@marbel's answer(这是一个很好的建议!),这是在 Mac OS X El Captain's Terminal 上为我工作的脚本,用于 batch 转换(因为这是 OP 要求的) .我认为做一个for 循环是微不足道的,但事实并非如此! (必须通过字符串操作更改扩展名,看起来 Mac 的 bash 也有点不同)

    for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x > $x1.csv; echo "$x1.csv done."; done
    

    注意:

    1. ${x%”.xlsx”} 是 bash 字符串操作,它从字符串末尾剪辑 .xlsx
    2. in2csv 创建单独的 csv 文件(不会覆盖 xlsx)。
    3. 如果文件名中有空格,上述方法将不起作用。在运行脚本之前,最好将空格转换为下划线或其他内容。

    【讨论】:

    • 很好的解决方案! FWIW,通过仔细引用(包括x1="${x%".xlsx"}";)和设置IFS to \n,您可以非常有效地处理空格。但是,甚至还有more robust ways,因为文件名也可以有换行符。
    • 很好的答案。许多 .xlsx 我在顶部包含 2 个空白行。修改命令删除前 2 行(需要在重定向之前):for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x | sed 1,2d > $x1.csv; echo "$x1.csv done."; done 感谢您提供了一个很棒的选项,包括 bash 删除 .xlsx 避免需要使用 bash base 选项!
    【解决方案5】:

    获取所有文件项并按后缀过滤,然后使用 PowerShell Excel VBA 对象将 excel 文件保存为 csv 文件。

    $excelApp = New-Object -ComObject Excel.Application 
    $excelApp.DisplayAlerts = $false 
    
    $ExcelFiles | ForEach-Object { 
        $workbook = $excelApp.Workbooks.Open($_.FullName) 
        $csvFilePath = $_.FullName -replace "\.xlsx$", ".csv" 
        $workbook.SaveAs($csvFilePath, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSV) 
        $workbook.Close() 
    } 
    

    你可以在这里找到完整的示例How to convert Excel xlsx file to csv file in batch by PowerShell

    【讨论】:

      【解决方案6】:

      需要安装 excel,因为它使用 Excel.Application com object。将其保存为 .bat 文件:

      @if (@X)==(@Y) @end /* JScript comment
          @echo off
      
      
          cscript //E:JScript //nologo "%~f0" %*
      
          exit /b %errorlevel%
      
      @if (@X)==(@Y) @end JScript comment */
      
      
      var ARGS = WScript.Arguments;
      
      var xlCSV = 6;
      
      var objExcel = WScript.CreateObject("Excel.Application");
      var objWorkbook = objExcel.Workbooks.Open(ARGS.Item(0));
      objExcel.DisplayAlerts = false;
      objExcel.Visible = false;
      
      var objWorksheet = objWorkbook.Worksheets(ARGS.Item(1))
      objWorksheet.SaveAs( ARGS.Item(2), xlCSV);
      
      objExcel.Quit();
      

      它接受三个参数 - xlsx 文件的绝对路径、工作表名称和目标 csv 文件的绝对路径:

      call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
      

      【讨论】:

      • 为我工作过:.\toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
      【解决方案7】:

      转换为 csv 的另一种方法。使用libreoffice

      libreoffice --headless --convert-to csv *
      

      请注意,这只会转换 Excel 文件的第一个工作表。

      【讨论】:

      • 在 Mac 上:/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv *
      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2020-05-06
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多