summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-05-01 16:31:32 -0500
committerJesse Luehrs <doy@tozt.net>2013-05-01 16:31:32 -0500
commit10caaad717821f1081cc5901e775b9bf222d9342 (patch)
tree24008fc7500e5838348e83c40bd925459d4990e3
parente30dd0f984245c54ed60dcf563ab0ebe25dd709d (diff)
downloadspreadsheet-template-10caaad717821f1081cc5901e775b9bf222d9342.tar.gz
spreadsheet-template-10caaad717821f1081cc5901e775b9bf222d9342.zip
properly support formulas (in xlsx at least)
-rw-r--r--lib/Spreadsheet/Template/Generator/Parser/Excel.pm9
-rw-r--r--lib/Spreadsheet/Template/Generator/Parser/XLS.pm2
-rw-r--r--lib/Spreadsheet/Template/Generator/Parser/XLSX.pm11
3 files changed, 16 insertions, 6 deletions
diff --git a/lib/Spreadsheet/Template/Generator/Parser/Excel.pm b/lib/Spreadsheet/Template/Generator/Parser/Excel.pm
index 0e12e66..40f2744 100644
--- a/lib/Spreadsheet/Template/Generator/Parser/Excel.pm
+++ b/lib/Spreadsheet/Template/Generator/Parser/Excel.pm
@@ -82,17 +82,13 @@ sub _parse_cell {
my $contents = $cell->unformatted;
my $type = $cell->type;
+ my $formula = $cell->{Formula}; # XXX
if ($type eq 'Numeric') {
$type = 'number';
}
elsif ($type eq 'Text') {
- if ($contents =~ /^=/) {
- $type = 'formula';
- }
- else {
- $type = 'string';
- }
+ $type = 'string';
}
elsif ($type eq 'Date') {
$type = 'date_time';
@@ -104,6 +100,7 @@ sub _parse_cell {
my $data = {
contents => $self->_filter_cell_contents($contents, $type),
type => $type,
+ ($formula ? (formula => $formula) : ()),
};
return $data;
diff --git a/lib/Spreadsheet/Template/Generator/Parser/XLS.pm b/lib/Spreadsheet/Template/Generator/Parser/XLS.pm
index 8ac14ef..eb5c949 100644
--- a/lib/Spreadsheet/Template/Generator/Parser/XLS.pm
+++ b/lib/Spreadsheet/Template/Generator/Parser/XLS.pm
@@ -25,6 +25,8 @@ sub make_excel {
];
}
+ # XXX no formula support yet
+
return $excel;
}
diff --git a/lib/Spreadsheet/Template/Generator/Parser/XLSX.pm b/lib/Spreadsheet/Template/Generator/Parser/XLSX.pm
index 904c04b..cf7c997 100644
--- a/lib/Spreadsheet/Template/Generator/Parser/XLSX.pm
+++ b/lib/Spreadsheet/Template/Generator/Parser/XLSX.pm
@@ -1,6 +1,7 @@
package Spreadsheet::Template::Generator::Parser::XLSX;
use Moose;
+use POSIX;
use Spreadsheet::XLSX;
use XML::Entities;
use XML::Twig;
@@ -48,6 +49,16 @@ sub make_excel {
$sheet->{ColWidth} = [
map { defined $_ ? 0+$_ : 0+$default_column_width } @column_widths
];
+
+ for my $formula ($root->find_nodes('//f')) {
+ my $cell_id = $formula->parent->att('r');
+ my ($col, $row) = $cell_id =~ /([A-Z]+)([0-9]+)/;
+ $col =~ tr/A-Z/0-9A-P/;
+ $col = POSIX::strtol($col, 26);
+ $row = $row - 1;
+ my $cell = $sheet->get_cell($row, $col);
+ $cell->{Formula} = "=" . $formula->text;
+ }
}
return $excel;