How do you convert multiple xlsx files to csv files with a batch script?
7 回答
转换为 csv 的替代方法。使用libreoffice
:
libreoffice --headless --convert-to csv *
请注意,这只会转换 Excel 文件的第一个工作表。
获取所有文件项并按后缀过滤它们,然后使用 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
为了跟进 user183038 的回答,这里是一个 shell 脚本,用于将所有 xlsx 文件批量重命名为 csv,同时保留文件名。xlsx2csv 工具需要在运行前安装。
for i in *.xlsx;
do
filename=$(basename "$i" .xlsx);
outext=".csv"
xlsx2csv $i $filename$outext
done
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
需要安装 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"
添加到@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
笔记:
${x%”.xlsx”}
是从字符串末尾剪辑的 bash 字符串操作.xlsx
。- in2csv创建单独的 csv 文件(不会覆盖 xlsx)。
- 如果文件名中包含空格,则上述内容将不起作用。在运行脚本之前,最好将空格转换为下划线或其他内容。