在命令行上使用分号分隔字段将 .xlsx (MS Excel) 文件转换为 .csv

all*_*ite 34 openoffice csv conversion spreadsheet libreoffice

我意识到这不是一个完全与 unix/linux 相关的问题。但由于这是我将在 linux 上做的事情,我希望有人有答案。

我有一个在线 excel 文件 ( .xlsx),它会定期更新(由其他人)。我想编写一个脚本并将其作为 cronjob 放入以处理该 excel 表。但要做到这一点,我需要将其转换为一个文本文件(所以 a .csv),其中包含分号分隔的列。不幸的是,它不能用逗号分隔,因为某些列中有逗号。是否有可能从 shell 进行这种转换?我安装了 Open office,我可以使用它的 GUI 来做到这一点,但想知道是否可以从命令行做到这一点。谢谢!

PS:我也有一台 Mac 机器,所以如果一些解决方案可以在那里工作,那也很好。:)

Gil*_*il' 25

OpenOffice 附带了unoconv程序,用于在命令行上执行格式转换。

unoconv -f csv filename.xlsx
Run Code Online (Sandbox Code Playgroud)

对于更复杂的需求,您可以使用Spreadsheet::XLSXPerl 或openpyxlPython解析 XLSX 文件。例如,这是一个快速脚本,用于将工作表打印为以分号分隔的 CSV 文件(警告:未经测试,直接在浏览器中输入):

perl -MSpreadsheet::XLSX -e '
    $\ = "\n"; $, = ";";
    my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
    my $worksheet = ($workbook->worksheets())[0];
    my ($row_min, $row_max) = $worksheet->row_range();
    my ($col_min, $col_max) = $worksheet->col_range();
    for my $row ($row_min..$row_max) {
        print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
    }
' filename.xlsx >filename.csv
Run Code Online (Sandbox Code Playgroud)


小智 10

https://github.com/dilshod/xlsx2csv

对我来说效果很好。大约 85 MB XLSX 文件在 Mac Book Pro SSD 上转换约 3 分钟。


neu*_*ino 6

我正在使用 Perl 的xls2csvxls文件转换为csv.

不确定它是否也适用xlsx

关于:

不幸的是,它不能用逗号分隔,因为某些列中有逗号

这就是引入引用的原因:

1,2,"data,data, more data"
Run Code Online (Sandbox Code Playgroud)