Perl 处理 Excel 文件
作者:zlj2208
修改日期:2010年06月07日
转载请注明转自http://zlj2208.cublog.cn/
Perl 处理 Excel有2种方法:
1、通过Spreadsheet::ParseExcel和Spreadsheet::WriteExcel模块
2、通过Win32::OLE模块
二者区别在于Spreadsheet是跨平台的,它的工作原理是将所有单元读到内存中处理,所以比较费内存。
一、通过Win32::OLE模块处理Excel
需要安装 ActiveState Perl,安装后通过ppm安装需要的模块,在Windows上ppm默认是图形化的,如果不习惯图形化的可以使用命令行方式安装:
ppm install
#!/usr/bin/perl -w # 操作Excel需要引用模块 use strict; use Win32::GUI qw( MB_ICONQUESTION MB_ICONINFORMATION MB_YESNOCANCEL MB_OK IDYES IDCANCEL ); use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; $Win32::OLE::Warn = 3;
my $file = "X:\\yourpath\\file.xls"; #取得 Excel 对象,如果不存在就新定义 Excel 对象 my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new( 'Excel.Application', 'Quit' ); #打开Excel文件 my $Book = $Excel->Workbooks->Open($file); #取得Worksheet数量 my $sheetcount = $Book->Worksheets->{Count}; #打开指定 Sheet ,Sheet 数从 1 开始 my $Sheet = $Book->Worksheets(1); #取得Sheet名称 my $sheetname = $Sheet->{Name}; #取得Sheet中的行数,最大为65535行 my $rows = $Sheet->{UsedRange}->{Rows}->{Count}; #取得Sheet中的列数,最大为255列 my $cols = $Sheet->{UsedRange}->{Columns}->{Count}; #取得 Sheet 中 $row 行 $col 为列的位置的值 my $text = $Sheet->Cells( $row, $col )->{'Value'}; #写入Excel $sheet->Cells($row, $col)->{'Value'} = 1; #关闭 Excel $Book->Close; |
二、通过Spreadsheet模块处理Excel
如果在Linux或者Unix服务器上是不可能安装Office的,我们可以通过 Spreadsheet 模块处理 Excel。
#!/usr/bin/perl -w use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Encode;
my $row=2; my $col=3;
my $file = "X:\\yourpath\\file.xls"; #定义 Excel 对象 my $Excel = new Spreadsheet::ParseExcel; #打开 Excel 文件 my $Book = $Excel->Parse($file) or die "Cannot open file $file .$/"; #取得Worksheet数量 my $sheetcount = $Book->{SheetCount}; #打开指定 Sheet ,Sheet 数从 0 开始 my $Sheet = $Book->{Worksheet}[0]; #取得Sheet名称 my $sheetname = $Sheet->{Name}; #取得Sheet中的行数,最大为65535行 my $max_row = $Sheet->{MaxRow}; #取得Sheet中的列数,最大为255列 my $max_col = $Sheet->{MaxCol}; #取得 Sheet 中 $row 行 $col 为列的位置的值 my $text = $Sheet->{Cells}[$row][$col]->Value; print $text . "$/";
#定义写 Excel,如果文件不存在,创建文件 my $dest_book = Spreadsheet::WriteExcel->new("X:\\yourpath\\wfile.xls") or die $!; #打开 指定sheet my $dest_sheet = $dest_excel->addworksheet(0); #写入文件内容 $dest_sheet->write($row, $col, decode( 'gb2312', "写入测试" )); #关闭Excel $dest_excel->close(); |
通过上面2个例子基本上完成大部分操作,有其他问题可以使用perldoc查询。