ppm> install OLE::Storage_Lite ppm> install Spreadsheet::ParseExcel ppm> install Spreadsheet::WriteExcel
读写已有Excel
#!/usr/bin/perl -w use strict; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; $Win32::OLE::Warn = 3; # die on errors... # get already active Excel application or open new my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); # open Excel file my $Book = $Excel->Workbooks->Open("c:/komodo projects/test.xls"); # You can dynamically obtain the number of worksheets, rows, and columns # through the Excel OLE interface. Excel's Visual Basic Editor has more # information on the Excel OLE interface. Here we just use the first # worksheet, rows 1 through 4 and columns 1 through 3. # select worksheet number 1 (you can also select a worksheet by name) my $Sheet = $Book->Worksheets(1); foreach my $row (1..4){ foreach my $col (1..3){ # skip empty cells next unless defined $Sheet->Cells($row,$col)->{'Value'}; # print out the contents of a cell printf "At ($row, $col) the value is %s and the formula is %s\n", $Sheet->Cells($row,$col)->{'Value'}, $Sheet->Cells($row,$col)->{'Formula'}; } } # clean up after ourselves $Book->Close;
新建Excel
use strict; use Win32::OLE; my $excel_file = 'c:/out.xls'; my ($row,@field,$c_times,$residual,$cols,$cell_end); my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $Book = $Excel->Workbooks->add; my $Sheet = $Book->Worksheets(1); my @array_cols=("Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); unlink $excel_file if (-e $excel_file); @field=("你好","他好","大家好","就我不好"); $cols=scalar(@field); $c_times=sprintf "%.0f",$cols/26+0.5; $residual=$cols%26; $cell_end = ($cols<27) ? $array_cols[$cols] : $array_cols[$c_times-1].$array_cols[$residual]; $row++; $Sheet->Range("A$row:$cell_end$row")->{Value} = [@field]; $Book->SaveAs($excel_file); undef($Sheet); undef($Book); undef($Excel);赋值:
$sheet->Cells($row, $col)->{'Value'} = 1;