Whenever i've used the Spreadsheet module, i also found it hard to create an Excel file from scratch, since the module doesn't handle formatting too well.
What i ended up doing was just creating my template and formatting in windows, then loading the template using Spreadsheet::ParseExcel. After that it's just a matter of writing and saving it using WriteExcel and SaveParser.
Here are some snippets from some code i had laying around. Hope this helps.
#excel modules
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::WriteExcel;
#loading template
my $parser = new Spreadsheet::ParseExcel::SaveParser;
my $template = $parser->Parse('timesheets/old_template.xls')
or die "Unable to open template";
my $temp_workbook;
#adding info...
#user name
setCellFormat(4,2);
$template->AddCell(0, 4, 2, "$real_name", $format);
#project name
setCellFormat(5,2);
$template->AddCell(0, 5, 2, "$project_name", $format);
#save data
my $workbook;
{ #ignore SaveAs errors and warnings
local $^W = 0;
$workbook = $template->SaveAs('/home/~myname/httpdocs/spreadsh
+eet.xls');
}