#!/usr/bin/perl -s umask 077; # xls2tsv - filter Excel worksheets into tab-separated text # Steve Kinzler, kinzler@cs.indiana.edu, Feb 05 # http://www.cs.indiana.edu/~kinzler/home.html#unix use Spreadsheet::ParseExcel::Simple; use File::Temp qw/tempdir tempfile/; $usage = < 0; if (@ARGV) { $file = $ARGV[0]; } else { $tdir = tempdir(CLEANUP => 1) || die $!; ($fh, $file) = tempfile(DIR => $tdir, SUFFIX => '.xls'); print $fh $_ while <>; close $fh; } @sheets = Spreadsheet::ParseExcel::Simple->read($file)->sheets; @sheets = ($sheets[0]) if $f; while (@sheets) { $sheet = shift @sheets; $row = 0; while ($sheet->has_data) { @data = $sheet->next_row; $row++; map { s/\t//gs; s/\n//gs; s/\r//gs } @data; map { s/^\s*//; s/\s*$// } @data unless $s; unless ($t) { if ($row == 1) { $ncol = $#data + 1; pop @data, $ncol-- while $data[$#data] eq ''; } else { pop @data while $#data + 1 > $ncol && $data[$#data] eq ''; } } print join("\t", @data), "\n"; } print "\n" if ! $w && @sheets; }