I have done a test.
You are right, the file size is bigger before you save the file. SpreadsheetWriteExcel generate an xls 5.0/95. So when you save it will overwrite in the last excel format (small size)
One solution could be open and save the excel file by code. You could do it at the end of your script, it really the size matter
Using ParseExcel
use Spreadsheet:

arseExcel::SaveParser;
my $oExcel = new Spreadsheet:

arseExcel::SaveParser;
my $oBook = $oExcel->Parse('temp.xls');
$oExcel->SaveAs($oBook, 'temp.xls');
Using OLE:
use Win32::OLE;
$excel = new Win32::OLE ('Excel.Application', 'Quit');
$excel->{Visible} = 0;
$excel->Workbooks->Open("$file_name") or die ("Error: unable to
open document ", Win32::OLE->LastError());
$excel->SaveAs('$file_name');
undef $excel;
dmazzini
GSM System and Telecomm Consultant