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


31

これは完全にUnix / Linux関連の質問ではないことを理解しています。しかし、これはLinuxで行うことなので、誰かが答えを期待しています。

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

PS:私もMacマシンを持っているので、そこで何らかの解決策が機能するなら、それも同様に良いことです。:)

回答:


21

OpenOfficeには、コマンドラインで形式変換を実行するunoconvプログラムが付属しています。

unoconv -f csv filename.xlsx

より複雑な要件についてはSpreadsheet::XLSX、Perlまたは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

unoconvは私のOOには付属していませんでしたが、私はそれをインストールし、うまく動作します(ただし、セミコロンではなく、コンマ区切りのファイルに変換します)!ありがとう!コンマを含むフィールドをどのように取得するかを理解する必要があります。とにかくありがとう。
allrite

@allriteああ、セパレータとしてのセミコロンの要件を見逃していました。PythonまたはPerlで処理するという私の提案は今でも有効です。ただし;、区切り文字としてCSVに変換するスクリプト(テストなし)も追加しました。
ジル 'SO-悪であるのをやめる'

ありがとう!Spreadsheet :: XLSXを使用しましたが、提供したCPANリンクのコードを使用しました。それは動作します:)
allrite



6

Perlのxls2csvを使用してxlsファイルをに変換していますcsv

動作するかどうかもわかりませんxlsx

約:

一部の列にはコンマが含まれているため、残念ながらコンマで区切ることはできません

それが引用が導入された理由です:

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

ヒントをありがとう、私はそれを試してみます。csv変換後、ファイルはawkスクリプトを通過するため、セミコロンで区切られたままにすることをお勧めします。また、フィールドセパレータとしてセミコロンを渡す方が簡単awkです。引用符内のコンマを探して、それらを別のものに置き換えることができました...今では別の質問です:)
allrite

ありがとう@neurino。代わりにGillesメソッドを使用しましたが、とにかく返信してくれてありがとう。
allrite

1

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ファイルを見てください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.