如何使用批处理脚本将多个xlsx文件转换为csv文件?
如何使用批处理脚本将多个xlsx文件转换为csv文件?
另一种将文件转换为 csv 的方式。使用 libreoffice
:
libreoffice --headless --convert-to csv *
请注意,这只会转换您的Excel文件的第一个工作表。
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv *
- Andrew McCombe获取所有文件项并按后缀进行筛选,然后使用 PowerShell Excel VBA 对象将 Excel 文件保存为 CSV 文件。
$excelApp = New-Object -ComObject Excel.Application
$excelApp.DisplayAlerts = $false
Get-ChildItem -File -Filter '*.xlsx' | ForEach-Object {
$workbook = $excelApp.Workbooks.Open($_.FullName)
$csvFilePath = $_.FullName -replace "\.xlsx$", ".csv"
$workbook.SaveAs($csvFilePath, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSV)
$workbook.Close()
}
您可以在此处找到完整的示例:如何使用PowerShell将Excel xlsx文件批量转换为csv文件。Get-ChildItem -File -Filter '*.xlsx'
这样。 - RJFalconer针对用户user183038的回答,这里提供一个shell脚本,可以将所有xlsx文件批量重命名为csv文件,并保留原始文件名。在运行脚本之前需要先安装xlsx2csv工具。
for i in *.xlsx;
do
filename=$(basename "$i" .xlsx);
outext=".csv"
xlsx2csv $i $filename$outext
done
"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();
call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
在@marbel的建议的基础上(这是一个很好的建议!),这里提供了针对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
。x1="${x%".xlsx"}";
)并将 IFS 设置为 \n
,您可以非常有效地处理空格。但是,还有更健壮的方法,因为文件名也可能包含换行符。 - jpaugh.xlsx
文件,它们在顶部包含 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
选项的需要! - jys这个PowerShell解决方案对我有用。其他选项(如csvkit)由于编码问题而失败,但是这个方法有效:
Install-Module ImportExcel
Import-Module ImportExcel
查看是否能够运行。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
cd
到包含所有.xlsx文件的目录Get-ChildItem -Filter *.xlsx | ForEach-Object { Import-Excel $_.FullName | Export-Csv ($_.FullName -replace '\.xlsx$','.csv') -NoTypeInformation }
完成后,您可能希望恢复执行权限。对我来说,这意味着运行Set-ExecutionPolicy -ExecutionPolicy Restricted
。
gocsv 可在 Mac、Linux 和 Windows 上运行,且不需要任何依赖项(无需 Microsoft Office、Libre Office 或 Python)。只需像这样运行xlsx command 命令:
gocsv xlsx file.xlsx
pip install xlsx2csv
xlsx2csv C:\my\folder\name