如何使用批处理脚本将多个xlsx文件转换为csv文件?
答案 0 :(得分:21)
答案 1 :(得分:8)
要通过user183038跟进答案,这里有一个shell脚本,可以在保留文件名的同时将所有xlsx文件批量重命名为csv。需要在运行之前安装xlsx2csv工具。
for i in *.xlsx;
do
filename=$(basename "$i" .xlsx);
outext=".csv"
xlsx2csv $i $filename$outext
done
答案 2 :(得分:7)
获取所有文件项并按后缀过滤它们,然后使用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
找到完整的示例答案 3 :(得分:5)
您需要一个外部工具,例如: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
答案 4 :(得分:3)
转换为CSV的替代方法。使用libreoffice
:
libreoffice --headless --convert-to csv *
答案 5 :(得分:1)
添加到@marbel's answer(这是一个很好的建议!),这是在Mac OS X El Captain的终端上为我工作的脚本,用于批量转换(因为这就是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
。 答案 6 :(得分:1)
需要安装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"