Spreadsheet::Parse & Write Excel
am 30.10.2007 16:30:45 von Justin C
I get the following error when running my script:
Can't locate object method "get_xf_index" via package
"Spreadsheet::ParseExcel::Format" at
/usr/local/share/perl/5.8.8/Spreadsheet/WriteExcel/Worksheet .pm line
1453
It looks odd to me. It's saying it can't locate an object method from
one module in the second module. The two modules are un-related (apart
from the fact that they both deal with Excel files), neither is
dependant on the other.
This is probably due to the way I'm using ...::WriteExcel, and stems
from my not understanding the documentation for ...::ParseExcel. It
looks like it's written very much for OO coding, I'm not that advanced
and have been, probably, banging my head against it too hard.
Here is some code:
#!/usr/bin/perl
use warnings;
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
my $inFile = "some.xls";
my $outFile = "output.xls";
my $lastCol = 9; # We don't want the data beyond this point
my $firstRow = 4;# counting from 0, 0-3 are the front page for printing
my $lastRow;
my $inBook = Spreadsheet::ParseExcel::Workbook->Parse($inFile);
my $outBook = Spreadsheet::WriteExcel->new($outFile);
my $outSheet = $outBook->add_worksheet();
foreach my $inSheet(@{$inBook->{Worksheet}}) { # there's only one
$lastRow = $inSheet->{MaxRow};
foreach my $row ( $firstRow .. $lastRow) {
foreach my $col ( 0 .. $lastCol) {
# get contents of cell
my $cellcontent = $inSheet->{Cells}[$row][$col]->{_Value};
my $cellFormat = $inSheet->{Cells}[$row][$col]->{Format};
# write contents of cell to new worksheet
$outSheet->write_string($row-3, $col-5, $cell, $cellFormat);
}
}
}
*** END ***
$cellFormat contains a hash reference, AFAICT. I was hoping that that
would be accepted by the ...::WriteExcel and generate what I want.
Can anyone spot anything obviously wrong with the above that may help
me? Are there any Spreadsheet::[Parse|Write]Excel experts here who have
suggestions?
I thank you for your help with this.
Justin.
--
Justin C, by the sea.
Re: Spreadsheet::Parse & Write Excel
am 30.10.2007 18:30:50 von Jim Gibson
In article <1a5d.47274e25.82120@zem>, Justin C
wrote:
> I get the following error when running my script:
>
> Can't locate object method "get_xf_index" via package
> "Spreadsheet::ParseExcel::Format" at
> /usr/local/share/perl/5.8.8/Spreadsheet/WriteExcel/Worksheet .pm line
> 1453
> Here is some code:
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
> use Spreadsheet::ParseExcel;
> use Spreadsheet::WriteExcel;
>
> my $inFile = "some.xls";
> my $outFile = "output.xls";
> my $lastCol = 9; # We don't want the data beyond this point
> my $firstRow = 4;# counting from 0, 0-3 are the front page for printing
> my $lastRow;
>
> my $inBook = Spreadsheet::ParseExcel::Workbook->Parse($inFile);
> my $outBook = Spreadsheet::WriteExcel->new($outFile);
> my $outSheet = $outBook->add_worksheet();
>
> foreach my $inSheet(@{$inBook->{Worksheet}}) { # there's only one
> $lastRow = $inSheet->{MaxRow};
>
> foreach my $row ( $firstRow .. $lastRow) {
> foreach my $col ( 0 .. $lastCol) {
> # get contents of cell
> my $cellcontent = $inSheet->{Cells}[$row][$col]->{_Value};
> my $cellFormat = $inSheet->{Cells}[$row][$col]->{Format};
> # write contents of cell to new worksheet
> $outSheet->write_string($row-3, $col-5, $cell, $cellFormat);
I think you mean $cellcontent here instead of $cell. Please
cut-and-past the exact code showing your problem.
> }
> }
> }
>
> *** END ***
>
> $cellFormat contains a hash reference, AFAICT. I was hoping that that
> would be accepted by the ...::WriteExcel and generate what I want.
>
> Can anyone spot anything obviously wrong with the above that may help
> me? Are there any Spreadsheet::[Parse|Write]Excel experts here who have
> suggestions?
Spreadsheet::ParseExcel and Spreadsheet::WriteExcel are separate
modules that have no relationship to each other and were written by
different authors. In particular, they each have their own concepts of
a "Format" object or class, and these are not shared. You cannot fetch
the format of a cell in an existing spreadsheet and transfer it whole
to a new spreadsheet. You are going to have to play around with
extracting the various pieces of the existing cell format and transfer
each piece to the new spreadsheet using the syntax of
Spreadsheet::WriteExcel.
Your error message occurs because you have sent a blessed object of the
Spreadsheet::ParseExcel::Format to the write_string method of a
Spreadsheet::WriteExcel::Worksheet object, and it is trying to call the
get_xf_index method, which does not exist in the
Spreadsheet::ParseExcel::Format class.
--
Jim Gibson
Posted Via Usenet.com Premium Usenet Newsgroup Services
----------------------------------------------------------
** SPEED ** RETENTION ** COMPLETION ** ANONYMITY **
----------------------------------------------------------
http://www.usenet.com
Re: Spreadsheet::Parse & Write Excel
am 31.10.2007 10:33:30 von Justin C
On 2007-10-30, Jim Gibson wrote:
>
> Spreadsheet::ParseExcel and Spreadsheet::WriteExcel are separate
> modules that have no relationship to each other and were written by
> different authors. In particular, they each have their own concepts of
> a "Format" object or class, and these are not shared. You cannot fetch
> the format of a cell in an existing spreadsheet and transfer it whole
> to a new spreadsheet.
That appears to be the crux of it.
> You are going to have to play around with
> extracting the various pieces of the existing cell format and transfer
> each piece to the new spreadsheet using the syntax of
> Spreadsheet::WriteExcel.
Looks like a fun time is going to be had by all then!!!
Thank you for your reply. It has helped me re-evaluate the problem.
Justin.
--
Justin C, by the sea.