UNIX bashスクリプトでcsvタブの名前を変更する

UNIX bashスクリプトでcsvタブの名前を変更する

Bashスクリプトによって生成されたCSVファイルがあります。 UNIX_REPORT.shExcelを使用してWindGrr側でCSVファイルを開くと、左下のタブ(またはシート)の名前が表示されますUNIX_REPORT.sh

このタブ/シートの名前をスクリプト名以外の名前に変更したい決定的なクライアントがあります。 UNIX側ではスクリプトをまったく変更できず、このレポートはWin側で試すにはあまりにも頻繁に生成されます。

ベストアンサー1

PerlにはCSVを読み込んでXLSXを書くモジュールがあるのでできるUNIX側でこれを行います。

次のように実行できます。クライアントに送信できるコンテンツがperl csv2xlsx.pl file.csv "this is the tab name"作成されます。file.xlsx

#!perl

use strict;
use warnings;
use autodie;
use Text::CSV;
use Excel::Writer::XLSX;

# input validation left as an exercise
my $f_csv = shift @ARGV;
(my $f_xlsx = $f_csv) =~ s/\.csv$/.xlsx/;
my $worksheet_name = shift @ARGV;

# read the CSV data
my $csv = Text::CSV->new({binary => 1});
open my $fh, "<:encoding(utf8)", $f_csv;
my @data;
while (my $row = $csv->getline($fh)) {
    push @data, $row;
}
$csv->eof or $csv->error_diag();
close $fh;

# write the xlsx
my $workbook = Excel::Writer::XLSX->new($f_xlsx);
my $worksheet = $workbook->add_worksheet($worksheet_name);
for (my $row = 0; $row < scalar @data; $row++) {
    $worksheet->write_row($row, 0, $data[$row]);
}
$workbook->close();

cpanをより詳しく見ると、少し簡単で、結果のExcelファイルがよりきれいになります。

#!perl

use strict;
use warnings;
use autodie;
use Text::CSV;
use Spreadsheet::GenerateXLSX   qw/generate_xlsx/;

# input validation left as an exercise
my ($f_csv, $worksheet_name) = @ARGV;
(my $f_xlsx = $f_csv) =~ s/.csv$/.xlsx/;

# read the CSV data
my $csv = Text::CSV->new({binary => 1});
open my $fh, "<:encoding(utf8)", $f_csv;
my $data = $csv->getline_all($fh);
$csv->eof or $csv->error_diag();
close $fh;

# write the xlsx
generate_xlsx($f_xlsx, $worksheet_name => $data);

おすすめ記事