in reply to Re: XLSX to CSV conversion
in thread XLSX to CSV conversion

Hi I just spotted something on your code: you are appending an extra comma after processing the last column of each line in the worksheet. This can lead to problems specially if you're using the generated csv file to load data to a database for example. I did the change below to make sure that did not happen. I hope it helps

#!/usr/bin/perl use strict; use warnings; use Spreadsheet::XLSX; my $excel = Spreadsheet::XLSX -> new ('/tmp/myexcel.xlsx'); 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 onl +y if the column being processed is not the last { $line .= ","; } } } chomp($line); print "$line\n"; $line = ''; } }

Replies are listed 'Best First'.
Re^3: XLSX to CSV conversion
by Anonymous Monk on May 27, 2020 at 09:06 UTC
    Dear,
    You correction is good, but is a bit incorrect.
    Line below is redundant: $line .= "\"".$cell -> {Val}."\",";
    The value is printed in next line.