summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-06-24 10:39:56 -0400
committerJesse Luehrs <doy@tozt.net>2013-06-24 10:40:43 -0400
commit96e03ca10062d93e6515398c1e693c2d82990429 (patch)
tree6ddc8ae4a2b26f6b283160c7a498bd08f9415710
parent3aabb0889169fa4aea380dc7958a4df6232c6d81 (diff)
downloadconf-96e03ca10062d93e6515398c1e693c2d82990429.tar.gz
conf-96e03ca10062d93e6515398c1e693c2d82990429.zip
script for turning excel files into a directory of csv files
-rwxr-xr-xbin/explode_csv41
1 files changed, 41 insertions, 0 deletions
diff --git a/bin/explode_csv b/bin/explode_csv
new file mode 100755
index 0000000..d32f5a9
--- /dev/null
+++ b/bin/explode_csv
@@ -0,0 +1,41 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Spreadsheet::ParseExcel;
+use Text::CSV;
+
+my $filename = $ARGV[0];
+
+my $parser = Spreadsheet::ParseExcel->new;
+my $wb = $parser->parse($filename) || die $parser->error;
+
+(my $dir = $filename) =~ s/\.[^.]*$//;
+mkdir $dir;
+chdir $dir;
+
+for my $ws ($wb->worksheets) {
+ my $csv = Text::CSV->new({ binary => 1, eol => "\n" });
+ my $filename = $ws->get_name . '.csv';
+ open my $fh, '>:encoding(UTF-8)', $filename
+ or die "Couldn't open $filename: $!";
+
+ my ($rmin, $rmax) = $ws->row_range;
+ my ($cmin, $cmax) = $ws->col_range;
+
+ for my $row (0..$rmin - 1) {
+ $csv->print($fh, [ ('') x ($cmax + 1) ]);
+ }
+
+ for my $row ($rmin..$rmax) {
+ my @row = (('') x $cmin);
+ for my $col ($cmin..$cmax) {
+ my $cell = $ws->get_cell($row, $col);
+ push @row, $cell ? $cell->value : '';
+ }
+ $csv->print($fh, \@row);
+ }
+
+ close $fh
+ or die "Couldn't close $filename: $!";
+}