web-dev-qa-db-ja.com

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

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

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

PS:私はMacマシンも持っているので、いくつかの解決策がそこで働くことができれば、それも良いことです。 :)

32
allrite

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ファイル。

9

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

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

約:

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

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

1,2,"data,data, more data"
6
neurino

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

1
magilda