Subject: | suggestions for Spreadsheet::WriteExcel::Simple |
Date: | Wed, 12 Sep 2007 13:53:22 -0500 |
To: | bug-Spreadsheet-WriteExcel-Simple [...] rt.cpan.org |
From: | "Ken Gibson" <ken.gibson [...] gmail.com> |
Cheers.
Just started using Spreadsheet::WriteExcel::Simple, FromDB and
FromDB::Query. Love them.
Only one problem I've had with them so far - Excel turns large numbers from
a database query into exponential notation. (Thanks MS :) In other words,
6036530000796707 gets converted automagically into 6.03 x 10e15.
I applied two changes to Simple to correct the problem. I believe it was the
second one that finally did it, but left them both in in case there was
something else going on I'm not aware of. Seems to be working now.
Here's the diff, if you find it useful.
--- /usr/local/src/Spreadsheet-WriteExcel-Simple-1.04/Simple.pm 2006-01-16
05:16:32.000000000 -0600
+++ /usr/lib/perl5/site_perl/5.8.8/Spreadsheet/WriteExcel/Simple.pm
2007-09-12 13:37:27.000000000 -0500
@@ -59,6 +59,14 @@
$self->{bold} = $self->book->addformat();
$self->{bold}->set_bold;
$self->{sheet} = $self->book->addworksheet;
+
+############################################
+# added formatting in an attempt to prevent
+# Excel from dropping leading
+# zeros. Thanks Microsoft!
+############################################
+
+ $self->{sheet}->keep_leading_zeros();
$self->{_row} = 0;
$self;
}
@@ -84,7 +92,16 @@
my $fmt = shift || '';
my $col = 0;
my $ws = $self->sheet;
- $ws->write($self->{_row}, $col++, $_, $fmt) foreach @data;
+
+ #$ws->write($self->{_row}, $col++, $_, $fmt) foreach @data;
+
+###############################
+# changed this to prevent Excel
+# from converting large numbers
+# to exponential notation
+###############################
+
+ $ws->write_string($self->{_row}, $col++, $_, $fmt) foreach @data;
$self->{_row}++;
}
Thanks
Ken