Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43472
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 16
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-15 11:11
文章分类

全部博文(26)

文章存档

2019年(1)

2010年(9)

2009年(1)

2008年(9)

2006年(6)

我的朋友

分类:

2010-06-07 22:19:29

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查询。

阅读(2407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~