use Win32::OLE; *error = *Win32::OLE::LastError; # some variables my $excelfile = 'test.csv'; # Start Excel and make it visible $Excel = Win32::OLE->new('Excel.Application'); $Excel->{Visible} = 1; # Turn off alerts #$Excel->{DisplayAlerts}=0; # Create a new workbook # $xlBook = $xlApp->Workbooks->Add; # Save workbook # $xlBook->SaveAs($excelfile); Good habit when working with OLE, save. # Or open an existing file #my $workbook = $Excel->Workbooks->Open($excelfile); my $workbook = $Excel->Workbooks->Open('D:\tools\cygwin\home\me\test.csv'); # create a new worksheet my $worksheet = $workbook->WorkSheets(1); $worksheet->{Name} = "Sheet1"; $workbook->PivotCaches->Add( { SourceType => 1, SourceData => 'D:\tools\cygwin\home\me\test.csv!R1C1:R101C4' } )->CreatePivotTable( { TableDestination => 'Sheet1!R1C6', TableName => 'PivotTable1', DefaultVersion => 1 } ); $workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Privilege')->{Orientation} = 1; # xlRowField $workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Privilege')->{Position} = 1; $workbook->ActiveSheet->PivotTables('PivotTable1')->AddDataField($workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Count')); die error() if error(); #$workbook->ActiveSheet->Range("G2")->Select; $workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Day of Month')->{AutoSort} = xlDescending, 'Day of Month' ; die error() if error(); $workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Day of Month')->{Orientation} = 2; # xlColumnField die error() if error(); $workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Day of Month')->{Position} = 1; die error() if error(); $workbook->ActiveSheet->Columns("g:r")->{ColumnWidth} = 3; # 3 die error() if error(); #$workbook->ActiveSheet->PivotTables('PivotTable1')->PivotFields('Day of Month'), AutoSort, xlDescending, 'Day of Month'; #die error() if error(); # clean up $workbook->SaveAs( $excelfile ); die error() if error(); $workbook->Close(); die error() if error(); exit 0; print "All done.";