diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-06-24 10:39:56 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-06-24 10:40:43 -0400 |
commit | 96e03ca10062d93e6515398c1e693c2d82990429 (patch) | |
tree | 6ddc8ae4a2b26f6b283160c7a498bd08f9415710 /bin | |
parent | 3aabb0889169fa4aea380dc7958a4df6232c6d81 (diff) | |
download | conf-96e03ca10062d93e6515398c1e693c2d82990429.tar.gz conf-96e03ca10062d93e6515398c1e693c2d82990429.zip |
script for turning excel files into a directory of csv files
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/explode_csv | 41 |
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: $!"; +} |