У меня есть сценарий ниже, который преобразует xlsx в csv, но если значение ячейки имеет запятую (,) между ними, оно перемещается к следующему столбцу в csv, что неверно. Колуд поправьте пожалуйста? Кроме того, как преобразовать несколько файлов xlsx в несколько файлов csv в один go?
#!/usr/bin/perl
use strict;
use warnings;
use Spreadsheet::XLSX;
use Text::CSV qw(csv);
my $excel = Spreadsheet::XLSX -> new ('/path/file.xlsx');
my $csv = '/path/File.csv';
open(my $FH ,'>',"$csv") or die "failed to open";
my $line;
foreach my $sheet (@{$excel -> {Worksheet}}) {
printf("Sheet: %s\n", $sheet->{Name});
$sheet -> {MaxRow} ||= $sheet -> {MinRow};
foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
$sheet -> {MaxCol} ||= $sheet -> {MinCol};
foreach my $col ($sheet -> {MinCol} .. $sheet -> {MaxCol}) {
my $cell = $sheet -> {Cells} [$row] [$col];
#if ($cell) {
# $line .= "\"".$cell -> {Val}."\",";
# $line .= $cell -> {Val};
# if ($col != $sheet -> {MaxCol}) #appends the comma only if the column being processed is not the last
# {
# $line .= ",";
# }
#}
if (defined $cell && defined $cell->Value) {
if ($col != $sheet -> {MaxCol})
{
print $FH $cell->Value.",";
}
else
{
print $FH $cell->Value ;
}
} else {
if ($col != $sheet -> {MaxCol})
{ print $FH ",";
}
}
}
$FH =~ s/,$//; # replace comma at the end of the string with empt
print $FH "\n";
}