【发布时间】:2020-10-27 01:31:27
【问题描述】:
我的代码适用于 XLSX 文件,但它在 XLSM 输入文件处中断。
要求
- 读取 Excel 的整行而不是单元格值。
- 我不想使用我的 $parser = Spreadsheet::ParseXLSX->new(); 我的 $workbook = $parser->parse($prvs_excel_file); 因为它只解析单元格值。
#!/home/utils/perl
use strict;
use warnings;
sub usage { die "usage: $0 file.xlsx name [out.csv]\n"; }
my $xls = shift or usage;
my $sht = shift or usage;
my $out = shift // $xls;
$out =~ s/\.xlsm$/.csv/i;
use Spreadsheet:: Read;
use Text::CSV_XS;
my $csv = Text::CSV_XS->new ({ binary => 1, eol => "\r\n", auto_diag => 1 });
open my $fh, ">", $out or die "$out: $!\n";
my $book = ReadData ($xls) or die "$xls: $!\n";
my $sheet = $book->[$book->[0]{sheet}{$sht}];
foreach my $row (1 .. $sheet->{maxrow}) {
$csv->print ($fh, [ Spreadsheet::Read::row ($sheet, $row) ]);
}
close $fh;
【问题讨论】:
-
是的,我做到了。它不符合我对行读取“读取 Excel 的整行而不是单元格值”的要求。
-
我正在调查它。目前我什至无法安装模块 Spreadsheet::Reader::ExcelXML (由于测试失败)。