これはnotが完全にUNIX/Linux関連の質問であることを理解しています。しかし、これは私がLinuxでやることなので、誰かが答えてくれることを願っています。
オンラインのExcelファイル(.xlsx
)定期的に(他の誰かによって)更新されます。そのExcelシートを処理するために、スクリプトを作成してcronjobとして配置したいと考えています。しかし、それを行うには、それをテキストファイルに変換する必要があります(つまり、.csv
)セミコロンで区切られた列。一部の列にはカンマが含まれているため、残念ながらカンマで区切ることはできません。シェルからこの変換を行うことはまったく可能ですか? Open Officeをインストールし、GUIを使用してこれを実行できますが、コマンドラインから実行できるかどうかを知りたいです。ありがとう!
PS:私はMacマシンも持っているので、いくつかの解決策がそこで働くことができれば、それも良いことです。 :)
OpenOfficeには、コマンドラインでフォーマット変換を実行する noconv プログラムが付属しています。
unoconv -f csv filename.xlsx
より複雑な要件については、XLSXファイルを Spreadsheet::XLSX
Perlでは openpyxl
Python。たとえば、セミコロンで区切られた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://github.com/dilshod/xlsx2csv
私にとってはうまくいきました。 Mac Book Pro SSDで約3分で変換された約85 MBのXLSXファイル。
Perlの xls2csv を使用して、xls
ファイルをcsv
に変換しています。
xlsx
でも動作するかどうかはわかりません。
約:
一部の列にはカンマが含まれているため、残念ながらカンマで区切ることはできません
それが引用が導入された理由です:
1,2,"data,data, more data"
私はPHPを使用しています。 http://phpexcel.codeplex.com/ からPHPExelライブラリをインストールするだけで、XML関数も必要になります。
これは私のコードです:
<?php
error_reporting(E_ALL);
date_default_timezone_set('Europe/London');
/** PHPExcel_IOFactory */
require_once '/home/markov/Downloads/1.7.6/Classes/PHPExcel/IOFactory.php';
$file="RIF394305.xlsx"; //PATH TO CSV FILE
// Check prerequisites
if (!file_exists($file)) {
exit("Please run 06largescale.php first.\n");
}
$objReader = PHPExcel_IOFactory::createReader('Excel2003XML');
$objPHPExcel = $objReader->load($file);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$objWriter->save(str_replace('.xlsx', '.csv',$file));
?>
プロセスを元に戻すか、別のExcel/CSV形式を使用できます。 PHPExcelディレクトリにあるさまざまなphpファイルを見てください。