]> git.donarmstrong.com Git - bin.git/blobdiff - txt2xls
handle multiple worksheets and rmode
[bin.git] / txt2xls
diff --git a/txt2xls b/txt2xls
index 97dc8de8ddac65b7eae0b9df2297d9773e1969c5..3ede2f4ea84846e3c1677d574833d0619ca66761 100755 (executable)
--- a/txt2xls
+++ b/txt2xls
@@ -127,15 +127,32 @@ for my $file (@ARGV) {
     my $ws = $wb->add_worksheet($ws_name) or
        die "Unable to add worksheet to workbook";
     my $row = 1;
+    my @header_row;
+    my $overflow = 0;
     while (<$fh>) {
        chomp;
        # parse the line
        my @row;
        die "Unable to parse line $. of $file" unless $csv->parse($_);
-       if ($row==1) {
+       if ($row==1 and $options{rmode}) {
+           # R doesn't output headers for rownames
            push @row,'';
        }
+       if ($row > 65536) { # ok, we're going to overflow here
+           my $t_ws_name = $ws_name;
+           my $maxlen = 31-length('.'.$overflow);
+           $t_ws_name =~ s{^(.{0,$maxlen}).*$}{$1};
+           $ws = $wb->add_worksheet($ws_name.'.'.$overflow);
+           $row=1;
+           for my $i (0..@header_row) {
+               $ws->write($columns[$i].$row,$header_row[$i]);
+           }
+           $row++;
+       }
        push @row,$csv->fields();
+       if ($row==1) {
+           @header_row = @row;
+       }
        for my $i (0..$#row) {
            $ws->write($columns[$i].$row,$row[$i]);
        }