#!/usr/bin/perl use strict; use warnings; use Spreadsheet::ParseExcel::Simple; use Text::CSV_XS; use IO::File; use File::Spec; for (@ARGV) { for (glob $_) { next unless m/\.xls$/i; next unless -r $_; dump_books($_); } } sub dump_books { my ($vol, $path, $file) = File::Spec->splitpath(shift); my $eBook = Spreadsheet::ParseExcel::Simple->read(File::Spec->catpath($vol,$path,$file)); my @sheet = $eBook->sheets; for (0..@sheet-1) { next unless $sheet[$_]->has_data(); my $sfn = $file; $sfn =~ s?\.xls$??i; $sfn.= ((@sheet > 1) ? sprintf(".%02i",$_) : "").'.csv'; my $io = IO::File->new(); $io->open('<'.$sfn) or do { warn "Unable to write to $sfn"; next; }; my $csv = Text::CSV->new; while ($sheet[$_]->has_data) { my @row = $sheet[$_]->next_row; $csv->print($io, \@row); } $io->close; } }