Conversion

在命令行上使用分號分隔欄位將 .xlsx (MS Excel) 文件轉換為 .csv

  • September 30, 2015

我意識到這不是一個完全與 unix/linux 相關的問題。但由於這是我將在 linux 上做的事情,我希望有人能回答。

我有一個線上 excel 文件 ( .xlsx),它會定期(由其他人)更新。我想編寫一個腳本並將其作為 cronjob 放入,以便處理該 excel 表。但要做到這一點,我需要將其轉換為.csv帶有分號分隔列的文本文件(so a )。不幸的是,它不能用逗號分隔,因為有些列中有逗號。是否有可能從 shell 進行這種轉換?我已經安裝了 Open office,我可以通過使用它的 GUI 來執行此操作,但想知道是否可以從命令行執行此操作。謝謝!

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

OpenOffice 帶有unoconv程序,用於在命令行上執行格式轉換。

unoconv -f csv filename.xlsx

對於更複雜的要求,您可以使用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

引用自:https://unix.stackexchange.com/questions/23726