我有从 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 脚本或应用程序根据时间、日期以及(如果需要)一些序号来进行命名,这应该像听起来一样简单。