tags 299870 patch forwarded 299870 http://rt.cpan.org/NoAuth/Bug.html?id=16786 thanks
> perl -MSpreadsheet::ParseExcel -le 'print unpack "H*", > Spreadsheet::ParseExcel->new->Parse("products.xls")->{Worksheet}[0]{Cells}[0][0]->Value' > > > 014d0061006e007400650061007500200065006e0020006300750069007200200033002f003400200062006f00750074006f006e006e00e9002000e00020006c0027006100760061006e0074002c002000610076006500630020006700610072006e006900740075007200650073002000610075007800200065006d0070006900e800630065006d0065006e007400730020006100760061006e00740020006500740020006100720072006900e800720065002c00200065007400200064006f00750062006c007500720065002000690073006f006c0061006e00740065002e00200049006d0070006f0072007400e9002e000a00c90074006f0066006600 Hi, the nulls show up because Spreadsheet::ParseExcel doesn't handle the string as Unicode, although it should. The attached patch fixes this. I have reported this to the upstream author as CPAN bug 299870, <http://rt.cpan.org/NoAuth/Bug.html?id=16786>. Cheers, -- Niko Tyni [EMAIL PROTECTED]
--- libspreadsheet-parseexcel-perl-0.2603.orig/ParseExcel.pm +++ libspreadsheet-parseexcel-perl-0.2603/ParseExcel.pm @@ -620,10 +620,21 @@ my($oBook, $bOp, $bLen, $sWk) = @_; my($iR, $iC, $iF, $iL, $sTxt); ($iR, $iC, $iF, $iL) = unpack("v4", $sWk); - $sTxt = substr($sWk, 8, $iL); + my $bver = $oBook->{BIFFVersion}; + my ($rich, $sCode); + if($bver == verBIFF8) { + my( $raBuff, @rest) = _convBIFF8String($oBook, substr($sWk, 6), 1); + $sTxt = $raBuff->[0]; + $sCode = ($raBuff->[1])? 'ucs2': undef; + $rich = $raBuff->[2]; + } else { + $sTxt = substr($sWk, 8, $iL); + $sCode = '_native_'; + $rich = substr($sWk, (8+$iL)+1) + if (length($sWk) > (8+$iL)); + } - #Has STRUN - if(length($sWk) > (8+$iL)) { + if($rich) { _NewCell ( $oBook, $iR, $iC, Kind => 'RString', @@ -631,9 +642,9 @@ FormatNo=> $iF, Format => $oBook->{Format}[$iF], Numeric => 0, - Code => '_native_', #undef, + Code => $sCode, Book => $oBook, - Rich => substr($sWk, (8+$iL)+1), + Rich => $rich, ); } else { @@ -644,7 +657,7 @@ FormatNo=> $iF, Format => $oBook->{Format}[$iF], Numeric => 0, - Code => '_native_', + Code => $sCode, Book => $oBook, ); }