Skip Menu |

This queue is for tickets about the Spreadsheet-XLSX CPAN distribution.

Report information
The Basics
Id: 86667
Status: open
Priority: 0/
Queue: Spreadsheet-XLSX

People
Owner: mikeb [...] cpan.org
Requestors: negor [...] at.ua
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Something wrong with xlsx generated by Google
Date: Wed, 03 Jul 2013 10:34:52 +0300
To: bug-Spreadsheet-XLSX [...] rt.cpan.org
From: Negor <negor [...] at.ua>
So, when I try to parse xlsx from google my %excel = %{Spreadsheet::XLSX -> new ($file)}; print Dumper(\%excel); I get this Use of uninitialized value in concatenation (.) or string at D:/usr/site/lib/Spreadsheet/XLSX.pm line 150. $VAR1 = bless( { 'Worksheet' => [ bless( { 'DefColWidth' => '8.43', 'MinCol' => 1000000, 'MaxRow' => 0, 'MinRow' => 1000000, 'path' => undef, 'MaxCol' => 0, 'Name' => '╦шёЄ1', 'Cells' => undef }, 'Spreadsheet::ParseExcel::Worksheet' ) ], 'Flg1904' => 0, 'FmtClass' => bless( {}, 'Spreadsheet::XLSX::Fmt2007' ), 'SheetCount' => 1 }, 'Spreadsheet::ParseExcel::Workbook' );
From: rlauer6 [...] comcast.net
Stumbled on this one too...appears to be some incorrect parsing of the rels file. The parser is looking for a very specific ordering of the attributes, however they are not in the order that the parser is expecting. The fix below works for me...a better approach might be to split the attributes on white space and grep for the attributes but I suspect the author was looking for speed in processing columns of a spreadsheet. foreach ($member_rels -> contents =~ /\<Relationship (.*?)\/?\>/g) { #/^Id="(.*?)".*?Target="(.*?)"/ or next; if (/^Id="(.*?)".*?Target="(.*?)"/) { $rels {$1} = $2; } elsif (/^Type=".*?".*?Target="\/xl\/(.*?)".*?Id="(.*?)"/) { $rels {$2} = $1; } elsif (/^Target="\/xl\/(.*?)".*?Type=".*?".*?Id="(.*?)"/) { $rels {$2} = $1; } elsif (/^Target="(.*?)".*?Type=".*?".*?Id="(.*?)"/) { $rels {$2} = $1; } }
From: rlauer6 [...] comcast.net
Also will need this fix for the Google downloaded .xlsx files - again the parser was looking for the r= attribute immediately after the tag open which is not always the case... foreach ($member_sheet -> contents =~ /(\<.*?\/?\>|.*?(?=\<))/g) { if (/^\<c\s*.*?\s*r=\"([A-Z])([A-Z]?)(\d+)\"/) { $col = ord ($1) - 65;