Hi again monks. Thanks for the help so far. I'm using H.Merijn Brand's ss2tk to display my Excel worksheets, however I'm using Rob Polocz' Spreadsheet::XLSX::Utility2007 module's xls2csv sub (really xlsx2csv) to convert my data into csv files.

My problem is the code of the module, seems to round off data to 2 decimal places whereas the ss2tk script doesn't have this problem. The xls2csv sub also uses the Spreadsheet::XLSX module so maybe something is going on there. Can anybody explain why or suggest a workaround like using the ss2tk or Spreadsheet::Read's processing to create a new xlsx2csv function?

The xls2csv section of the Spreadsheet::XLSX::Utility2007 module is below. Note Rob Polocz kindly suggested replacing

my $oExcel = new Spreadsheet::XLSX ; my $oBook = $oExcel->Parse( $filename) ;
with this line in the code...
my $oBook = Spreadsheet::XLSX->new($filename);
in order to make the xls2csv function work in the first place. He is currently working on revising his module.
sub xls2csv { my ($filename, $regions, $rotate) = @_ ; my $sheet = 0 ; my $output = "" ; # extract any sheet number from the region string $regions =~ m/^(\d+)-(.*)/ ; if( $2) { $sheet = $1 - 1 ; $regions = $2 ; } # now extract the start and end regions $regions =~ m/(.*):(.*)/ ; if( !$1 || !$2) { print STDERR "Bad Params"; return "" ; } my @start = sheetRef( $1) ; my @end = sheetRef( $2) ; if( !@start) { print STDERR "Bad coordinates - $1"; return "" ; } if( !@end) { print STDERR "Bad coordinates - $2"; return "" ; } if( $start[1] > $end[1]) { print STDERR "Bad COLUMN ordering\n"; print STDERR "Start column " . int2col($start[1]); print STDERR " after end column " . int2col($end[1]) . "\n"; return "" ; } if( $start[0] > $end[0]) { print STDERR "Bad ROW ordering\n"; print STDERR "Start row " . ($start[0] + 1); print STDERR " after end row " . ($end[0] + 1) . "\n"; exit ; } # start the excel object now my $oBook = Spreadsheet::XLSX -> new($filename); # my $oExcel = new Spreadsheet::XLSX ; # my $oBook = $oExcel->Parse( $filename) ; # open the sheet my $oWkS = $oBook->{Worksheet}[$sheet] ; # now check that the region exists in the file # if not trucate to the possible region # output a warning msg if( $start[1] < 0) { print STDERR int2col( $start[1]) . " < min col " . int2col(0) +. " Resetting\n"; $start[1] = 0 ; } if( $end[1] > 701) { print STDERR int2col( $end[1]) . " > max col " . int2col(701) +. " Resetting\n" ; $end[1] = 701 ; } if( $start[0] < 0) { print STDERR "" . ($start[0] + 1) . " < min row " . (0 + 1) . +" Resetting\n"; $start[0] = 0 ; } if( $end[0] > 1048575) { print STDERR "" . ($end[0] + 1) . " > max row " . (1048575 + 1 +) . " Resetting\n"; $end[0] = 1048575 ; } my $x1 = $start[1] ; my $y1 = $start[0] ; my $x2 = $end[1] ; my $y2 = $end[0] ; 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 .= "," 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 .= "," if( $y != $y2) ; } $output .= "\n" ; } } return $output ; }

In reply to Why Does the Module(s) Round off to 2 Decimal Places? by socrtwo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.