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::XLSX
Perl 或openpyxl
Python解析 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)
我正在使用 Perl 的xls2csv将xls
文件转换为csv
.
不确定它是否也适用xlsx
。
关于:
不幸的是,它不能用逗号分隔,因为某些列中有逗号
这就是引入引用的原因:
1,2,"data,data, more data"
Run Code Online (Sandbox Code Playgroud)