コマンドラインで.xlsx(MS Excel)ファイルを.csvに変換し、セミコロンを使用してフィールドを区切ります。

コマンドラインで.xlsx(MS Excel)ファイルを.csvに変換し、セミコロンを使用してフィールドを区切ります。

私はこれであることに気づくいいえ完全にUNIX/Linuxに関する質問です。しかし、これが私がLinuxでやるべきことなので、誰かが答えてくれることを願っています。

.xlsx私は(他の人によって)定期的に更新されるオンラインExcelファイル()を持っています。このExcelシートを処理するスクリプトを作成し、それをcronjobに設定したいと思います。ただし、これを行うには、.csvセミコロンで区切られた列(したがってa)を含むテキストファイルに変換する必要があります。残念ながら、一部の列にはカンマがあるため、カンマで区切ることはできません。シェルでこの変換を実行できますか? Open OfficeがインストールされていてGUIを使用してこれを実行できますが、コマンドラインからこれを実行できるかどうかを知りたいです。ありがとうございます!

PS:私はMacも持っています。 Macで動作するソリューションがあれば、それも良いようです。 :)

答え1

オープンオフィスに含まれるウノフプログラムはコマンドラインでフォーマット変換を実行します。

unoconv -f csv filename.xlsx

より複雑な要件の場合は、以下を使用してXLSXファイルを解析できます。Spreadsheet::XLSXパールまたはopenpyxlPythonで。たとえば、ワークシートをセミコロンで区切られた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

答え2

https://github.com/dilshod/xlsx2csv

私にとってうまくいきます。 Mac Book Pro SSDから約85MBのXLSXファイルを変換するのに約3分かかります。

答え3

私はPerlを使用しています。xls2csvファイルxlscsv

それも適用されるかどうかはわかりませんxlsx

について:

残念ながら、一部の列にはカンマがあるため、カンマで区切ることはできません。

これが参照が導入された理由です。

1,2,"data,data, more data"

答え4

私はPHPを使用しています。 PHPExelライブラリをインストールするだけです。http://phpexcel.codeplex.com/ たぶん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ファイルを見てください。

関連情報