Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^6: Create CSV file from xlsx file

by viji234 (Initiate)
on Oct 28, 2013 at 10:48 UTC ( [id://1059960]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Create CSV file from xlsx file
in thread Create CSV file from xlsx file

Thank you :) I changed the code to as you mentioned but the CSV file is empty and I am getting an error as below.
#error Sheet: sheet1 Uncaught exception from user code: Expected fields to be an array ref at test_csv_1.pl line 38. Text::CSV_PP::print('Text::CSV=HASH(0x348e558)', 'S.no') calle +d at test_csv_1.pl line 38
use strict; use warnings; use diagnostics; use Spreadsheet::XLSX; use Text::CSV; my $excel = Spreadsheet::XLSX -> new ('Sample.xlsx',); my $csv = Text::CSV->new ({eol => "\n"}); foreach my $sheet (@{$excel -> {Worksheet}}) { printf("Sheet: %s\n", $sheet->{Name}); #my @worksheet = qw(sheet1 sheet2); my $maxrow = $sheet -> {MaxRow}; my $Minrow = 1; my @wanted_cols = (8, 9, 10, 20); $maxrow ||= $Minrow; open FH, ">new.csv" or die "new.csv: $!"; foreach my $row ($Minrow .. $maxrow) { foreach my $wanted_cols (@wanted_cols) { my $wanted_cells =$sheet->{Cells}[$row][$want +ed_cols]; $csv -> print ( $wanted_cells -> {Val} ); } $csv -> print ("\n"); } close FH or die "new.csv: $!"; }

Replies are listed 'Best First'.
Re^7: Create CSV file from xlsx file
by Tux (Canon) on Oct 28, 2013 at 12:07 UTC

    You either did not read the docs, or they are still unclear to you. To me even the error message is clear. Text::CSV's print () needs completely different arguments then what you pass.

    PLEASE, do us all a favor and read the manuals before you post questions here that appear rather silly.

    use warnings; use diagnostics; use Spreadsheet::XLSX; use Text::CSV; my $excel = Spreadsheet::XLSX->new ("Sample.xlsx"); my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1, eol => "\n" + }); foreach my $sheet (@{$excel->{Worksheet}}) { printf ("Sheet: %s\n", $sheet->{Name}); #my @worksheet = qw(sheet1 sheet2); my $Minrow = 1; my $maxrow = $sheet->{MaxRow} || $Minrow; my @wanted_cols = (8, 9, 10, 20); open my $fh, ">", "new.csv" or die "new.csv: $!"; foreach my $row ($Minrow .. $maxrow) { $csv->print ($fh, [ map { $sheet->{Cells}[$row][$_]{Val} } @wanted_cols ]}; } close my $fh or die "new.csv: $!"; }

    Enjoy, Have FUN! H.Merijn
      Thank you tux.. I did read the manual but I think I didn got that part. thank you so much.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1059960]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2024-04-26 08:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found