use strict; use warnings; use Cwd; use Win32::OLE; my $xlApp = Win32::OLE->new('Excel.Application'); $xlApp->{DisplayAlerts} = 0; $xlApp->{ScreenUpdating} = 0; my $xlBook = $xlApp->Workbooks->Add(); $xlBook->SaveAs(cwd . "/example.xls"); print "Saved to " . cwd . "/example.xls"; my $page1 = $xlBook->Worksheets->Add(); $page1->{Name} = "Page One"; $page1->Move({After => $xlBook->Sheets($xlBook->Sheets->{Count})}); my $page2 = $xlBook->Worksheets->Add(); $page2->{Name} = "Page Two"; $page2->Move({After => $xlBook->Sheets($xlBook->Sheets->{Count})}); my $chart1 = $xlBook->Charts->Add(); $chart1->{Name} = "Chart One"; $chart1->Move({After => $xlBook->Sheets($xlBook->Sheets->{Count})}); my $tocSheet = $xlBook->Worksheets->Add(); $tocSheet->{Name} = "Table of Contents"; $tocSheet->Move({Before => $xlBook->Worksheets(1)}); $tocSheet->Hyperlinks->Add({Anchor => $tocSheet->Cells(1, 1), Address => "", SubAddress => "'Page One'!A1", TextToDisplay => "Page One"}); $tocSheet->Hyperlinks->Add({Anchor => $tocSheet->Cells(2, 1), Address => "", SubAddress => "'Page Two'!A1", TextToDisplay => "Page Two"}); #Need some way to link to Chart One here... $xlBook->Worksheets("Sheet1")->Delete if($xlBook->Worksheets("Sheet1")); $xlBook->Worksheets("Sheet2")->Delete if($xlBook->Worksheets("Sheet2")); $xlBook->Worksheets("Sheet3")->Delete if($xlBook->Worksheets("Sheet3")); $xlBook->Save(); $xlBook->Close(); $xlApp->Quit();