#!/usr/bin/perl -s

# tsv2xls - filter tab-separated text into an Excel worksheet
# Steve Kinzler, steve@kinzler.com, May 03
# https://kinzler.com/me/home.html#unix

use Spreadsheet::WriteExcel;
# 2011-10-24 Excel::Writer::XLSX now preferred, same api

$newtrigger = 'START NEW SHEET BOOMERANG';

die "usage: $0 [ -t ] [ -T ] [ infile | - ] [ outfile ]
	-t	highlights worksheets' first row as titles
	-T	highlights worksheets' second row as titles
An input line of '$newtrigger' will start a new worksheet.\n" if $h;

$in   = (@ARGV) ? shift : '-';
$book = Spreadsheet::WriteExcel->new(@ARGV ? $ARGV[0] : '-');
if ($t || $T) {
	$fmt = $book->addformat();
	$fmt->set_bold();   $fmt->set_align('center');
	$fmt->set_border(); $fmt->set_bg_color('tan');
}

open(IN, "< $in") || die "$0: cannot open $in ($!)\n";

&newsheet();
while (<IN>) {
	chomp;
	&newsheet(), next if $_ eq $newtrigger;
	@_ = split("\t", $_);

	$c = 0;
	foreach (@_) {
		(/^(<NULL>)?$/) ? $sheet->write_blank($r, $c++, undef)
				: $sheet->write(      $r, $c++, $_);
	}
	$r++;
}

close IN;
$book->close();

sub newsheet {
	$r = 0;
	$sheet = $book->addworksheet();
	$sheet->keep_leading_zeros();
	$sheet->set_row(0, undef, $fmt) if $t;
	$sheet->set_row(1, undef, $fmt) if $T;
}
