59

How do you convert multiple xlsx files to csv files with a batch script?

4

7 回答 7

35

试试in2csv

用法:

in2csv file.xlsx > file.csv
于 2015-04-23T18:31:19.027 回答
12

转换为 csv 的替代方法。使用libreoffice

libreoffice --headless --convert-to csv *

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

于 2019-10-07T18:09:40.867 回答
11

获取所有文件项并按后缀过滤它们,然后使用 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

于 2017-03-30T05:49:34.187 回答
10

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

for i in *.xlsx;
 do
  filename=$(basename "$i" .xlsx);
  outext=".csv" 
  xlsx2csv $i $filename$outext
done
于 2014-12-05T12:02:38.007 回答
7

You need an external tool, in example: SoftInterface.com - Convert XLSX to CSV.

After installing it, you can use following command in your batch:

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

于 2011-03-14T06:39:39.230 回答
4

需要安装 excel,因为它使用Excel.Application com 对象。将其保存为.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"
于 2017-03-30T07:28:16.000 回答
2

添加到@marbel 的答案(这是一个很好的建议!),这是在 Mac OS X El Captain's Terminal 上为我工作的脚本,用于批量转换(因为这是 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. 如果文件名中包含空格,则上述内容将不起作用。在运行脚本之前,最好将空格转换为下划线或其他内容。
于 2017-03-22T11:06:14.053 回答