The problem has nothing to do with how the spreadsheet is generated. When using your code
use strict;
use warnings;
use 5.010;
#use Spreadsheet::WriteExcel;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn=3;
my $Excel=Win32::OLE->GetActiveObject('Excel.Application')||
Win32::OLE->new('Excel.Application', 'Quit');
my $book=$Excel->Workbooks->Open("./test.xls");
my $sheet=$book->Worksheets(1);
I get the same error on a spreadsheet I created myself with Excel 2003. Using the slightly modified code
use strict;
use warnings;
use 5.010;
#use Spreadsheet::WriteExcel;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn=3;
my $Excel=Win32::OLE->GetActiveObject('Excel.Application')||
Win32::OLE->new('Excel.Application', 'Quit');
my $book=$Excel->Workbooks->Open("c:\\data\\temp\\test.xls");
my $sheet=$book->Worksheets(1);
it opens the workbook just fine.