Bashスクリプトによって生成されたCSVファイルがあります。 UNIX_REPORT.sh
Excelを使用して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);
答え2
逆ではなく操作の場合が多いです。あなたの場合は、Windowsでこれを行う必要があると思います。重要なのは、作業を自動化することです。これに対して実行できるアクションを提案できるように、サンプルスクリプトの出力を表示する必要があります。つまり、いくつかの利用可能なツールを使用して合理的なデータを抽出し、良いファイル名を整理し、ファイル名を変更するWindowsスクリプトを作成します。新しく名前が付けられたファイルをExcelに渡すこともオプションですが、別の便利な方法です。
名前がファイルの内容に関連していない場合は、Windowsスクリプトまたはアプリケーションを使用して、時間、日付、および(必要に応じて)いくつかのシリアル番号に基づいて名前を付けることができます。