Excel 使用批处理将xlsx文件转换为csv

Excel 使用批处理将xlsx文件转换为csv,excel,csv,batch-file,xlsx,Excel,Csv,Batch File,Xlsx,如何使用批处理脚本将多个xlsx文件转换为csv文件?您需要一个外部工具,例如: 安装后,可以在批处理中使用以下命令: “c:\Program Files\Softinterface,Inc\Convert XLS\ConvertXLS.EXE”/S“c:\MyExcelFile.xlsx”/F51/N“Sheet1”/T“c:\MyExcelFile.CSV”/C6/M1/V要跟进用户183038的回答,这里有一个shell脚本,可以将所有xlsx文件批量重命名为CSV,同时保留文件名。运行前

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

您需要一个外部工具,例如:

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


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

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

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

用法:

in2csv file.xlsx > file.csv
再加上(这是一个很好的建议!),下面是在MacOSX El Captain's终端上为我工作的脚本,用于批量转换(因为这是OP要求的)。我原以为为循环执行
很简单,但事实并非如此!(不得不通过字符串操作更改扩展名,看起来Mac的bash也有点不同)

注:

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

  • 获取所有文件项并按后缀进行筛选,然后使用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() 
    } 
    

    您可以在此处找到完整的示例

    需要安装excel,因为它使用的是
    excel.Application
    。请将其另存为
    .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"
    

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

    libreoffice --headless --convert-to csv *
    

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

    @ocasoprotal,接受答案。这管用@布莱恩,嗯?我不是原来的海报,因此我不能接受答案。我只是重新回答了这个问题@Ankur必须接受这个答案。试试这个:来自@沼泽猿的答案很有效。如果OP能给出答案就好了。toolStatement“命令行功能不足以将xlsx转换为csv”应该被删除(不正确),并且“您需要一些外部工具”应该被替换为“您可以使用”等。例如,请参阅@marbel的答案(但还有其他解决方案)。请参阅伟大的解决方案!FWIW,通过仔细引用(包括
    x1=“${x%”“.xlsx”}”
    )和设置,您可以非常有效地处理空格。但是,甚至还有,因为文件名也可以有换行符。答案很好。许多
    .xlsx
    我在顶部包含了两个空白行。修改命令以删除前2行(需要在重定向之前):
    对于x,单位为$(ls*.xlsx);dox1=${x%.”.xlsx“};in2cvs$x | sed 1,2d>$x1.csv;回显“$x1.csv完成。”;完成
    感谢您提供了一个很棒的选项,包括删除bash中的
    .xlsx
    避免了使用bash
    base
    选项!在mac电脑上:
    /Applications/LibreOffice.app/Contents/MacOS/soffice--headless--convert to csv*
    libreoffice --headless --convert-to csv *