perl_n00b has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, I am pretty new to perl and am having trouble deciphering how to use the Spreadsheet::XLSX module. The synopsis is this:
use Text::Iconv; my $converter = Text::Iconv -> new ("utf-8", "windows-1251"); # Text::Iconv is not really required. # This can be any object with the convert method. Or nothing. use Spreadsheet::XLSX; my $excel = Spreadsheet::XLSX -> new ('test.xlsx', $converter); 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 -> {Max +Col}) { my $cell = $sheet -> {Cells} [$row] [$col]; if ($cell) { printf("( %s , %s ) => %s\n", $row, $col, +$cell -> {Val}); } } } }
My first problem is that when I search for Text::Iconv through my Perl Package Manager, I can't find it.

My second problem is I don't think I am reading the synopsis correctly. If I want to read in all of column A from c:\perl.xlsx how would I do that?

Also, does anyone know of a module to write to a .xlsx file?

Thanks in advance!

Replies are listed 'Best First'.
Re: Read in .xlsx
by stefbv (Priest) on Nov 09, 2009 at 13:40 UTC

    1. Text::Iconv is optional.

    2. This code prints only column 0 (zero) or 'A'

    use strict; use warnings; use Spreadsheet::XLSX; my $excel = Spreadsheet::XLSX->new('test.xlsx'); my $col = 0; # Read col A , $col has to be a number foreach my $sheet (@{$excel->{Worksheet}}) { printf("Sheet: %s\n", $sheet->{Name}); $sheet->{MaxRow} ||= $sheet->{MinRow}; foreach my $row ( $sheet->{MinRow} .. $sheet->{MaxRow} ) { my $cell = $sheet->{Cells}[$row][$col]; if ($cell) { print $cell->{Val}, "\n"; } } }

    In English: for each sheet, for each row print cell contents at (row,col) where col is a constant.