web-dev-qa-db-ja.com

コマンドラインで複数のCSVファイルを1つのodsファイルに結合する方法。元のファイルごとに1枚のシート

複数のCSVファイルを1つのodsファイルに結合する方法ファイルごとに1枚のシート。 10個のCSVファイルがあり、それらを結合して、元のCSVごとに1つずつ、10枚のシートで構成される1つのodsファイルにします。これはコマンドラインで実行する必要があります。

1
Bruni

Perlの場合:

#!/usr/bin/env Perl
use strict;
use warnings;
use autodie;
# CPAN modules required:
use Spreadsheet::Write;
use Text::CSV;

my $xlsx_file = shift @ARGV;
$xlsx_file .= ".xlsx" unless $xlsx_file =~ /\.xlsx$/;
my $xlsx = Spreadsheet::Write->new(file => $xlsx_file);
my $csv = Text::CSV->new({binary => 1});

for my $csv_file (@ARGV) {
    my @rows = ();
    open my $fh, "<:encoding(utf8)", $csv_file;
    while (my $row = $csv->getline($fh)) {
        Push @rows, $row;
    }
    $csv->eof or $csv->error_diag();
    close $fh;  

    (my $sheet_name = $csv_file) =~ s/\.[^.]+$//;   # strip extension
    $xlsx->addsheet($sheet_name);
    $xlsx->addrows(@rows);
}
$xlsx->close();

そして次のように使用します:

/path/to/create_xlsx.pl file.xlsx *.csv

Perlがあなたのものではない場合、少しグーグルで明らかになります:

1
glenn jackman