Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: Why Does the Module(s) Round off to 2 Decimal Places?

by socrtwo (Sexton)
on May 03, 2009 at 12:29 UTC ( [id://761572]=note: print w/replies, xml ) Need Help??


in reply to Re: Why Does the Module(s) Round off to 2 Decimal Places?
in thread Why Does the Module(s) Round off to 2 Decimal Places?

Thanks very much for your answer and that may be the crux of the matter, however, when I change $cell->Value to $cell ->{Val} in Spreadsheet::XLSX::Utility2007, nothing changes. I also tried {$cell}->Value
  • Comment on Re^2: Why Does the Module(s) Round off to 2 Decimal Places?

Replies are listed 'Best First'.
Re^3: Why Does the Module(s) Round off to 2 Decimal Places?
by frieduck (Hermit) on May 03, 2009 at 13:25 UTC

    Below is my changed code, which tests fine for me. I also had to add a "Use Spreadsheet::XLSX" to the top of Spreadsheet::XLSX::Utility2007, and, for some reason I don't understand, had to change line 136 of Spreadsheet::XLSX::Fmt2007 to "return Spreadsheet::XLSX::Utility2007::ExcelFmt($sFmtStr, $Dt, $Flg1904, $oCell->{Type});"

    if( !$rotate) { for( my $y = $y1 ; $y <= $y2 ; $y++) { for( my $x = $x1 ; $x <= $x2 ; $x++) { my $cell = $oWkS->{Cells}[$y][$x] ; #$output .= $cell->Value if(defined $cell); $output .= $cell->{Val} if(defined $cell); $output .= "," if( $x != $x2) ; } $output .= "\n" ; } } else { for( my $x = $x1 ; $x <= $x2 ; $x++) { for( my $y = $y1 ; $y <= $y2 ; $y++) { my $cell = $oWkS->{Cells}[$y][$x] ; #$output .= $cell->Value if(defined $cell); $output .= $cell->{Val} if(defined $cell); $output .= "," if( $y != $y2) ; } $output .= "\n" ; } }
Re^3: Why Does the Module(s) Round off to 2 Decimal Places?
by socrtwo (Sexton) on May 03, 2009 at 13:26 UTC
    It turns out that is you change in the Spreadsheet::XLSX module:
    my $cell =Spreadsheet::ParseExcel::Cell->new( Val => $v, Format => $thisstyle, Type => $type );
    to
    my $cell =Spreadsheet::ParseExcel::Cell->new( Val => $v, Format => $thisstyle, Type => "" );
    It removes the formatting. There are still minor differences with what appears in the ss2tk display. The format that results from the change mentioned above seems to use the same sort of rounding that Excel itself does before displaying the raw data from worksheet#.xml files.

    For instance a piece of raw data displayed in the ss2tk table and in the XML worksheet file is 1.3318000000000001 and changing the Spreadsheet::XLSX routine and using the Utility2007::xls2csv function and Excel itself displays a rounding to 1.3318.

    Thanks again for the help.

      The change you've made appears to apply default formatting (i.e. ignoring the specified format for the cell), whereas the change I proposed to xls2csv (earlier reply) pulls the unformatted value as stored in the xlsx file.

      Personally, I'd change my local xls2csv sub, to avoid surprises in other uses of Spreadsheet::XLSX.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (6)
As of 2024-04-19 08:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found