cmd, then input the command: ppm> install OLE::Storage_Lite
天天写excel,自己写了一个小工具,减少一点简单重复劳动。(本人不是excel高手,欢迎excel指正)
比如::把Book1.xls中的单元格的对应的内容写到Book.xls相应的单元格之后。
例如,原文档如下
Book.xls Book.xls
2 1 a
1 2 b
运行之后
Book.xls变成
2 b
1 a
这小工具是用perl写的,所以要先装一个perl环境。
用股沟搜perl。第一个。
我用的是ActivePerl Community Edition-- ActivePerl 5.10.1.1007(对,free!)
直接运行就装上了
然后要装两个包:Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel
用Perl Package Manager(开始->程序->.......)来装以上的两个包。(可能会有几个依赖的包,点上安装就好)
运行perl也很简单,把代码放到文本里,保存之后,把文本后缀改成.pl就好了。
可以在命令行里运行perl -w XXXX.pl(-w 是为了打印告警信息,便于调试)
也可以直接双击啦。
以下是程序代码。
#!/usr/bin/perl -w
use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');
my $Book = $Excel->Workbooks->Open("d:/Book.xls");
my $Book1 = $Excel->Workbooks->Open("d:/Book1.xls");
my $Sheet = $Book->Worksheets(1);
my $Sheet1 = $Book1->Worksheets(1);
foreach my $row (1..200)
{
# skip empty cells
next unless defined $Sheet->Cells($row,1)->{'Value'};
$a=$Sheet->Cells($row,2)->{'Value'};#轮流取第一列的前200个单元格中的非空单元格=$a
foreach my $row1 (1..99)
{
next unless defined $Sheet1->Cells($row1,1)->{'Value'};
$b=$Sheet1->Cells($col,1)->{'Value'};#轮流取第一列的前99个单元格中的非空单元格=$b
if ( $a ep $b )#对于字符的匹配,不是if($a=$b)哦!
{
$b=$Sheet1->Cells($row1,2)->{'Value'};#注意!是($row1,2)。对就是匹配到的那个单元格右边的那个单元格。
$Sheet->Cells($row,2)->{'Formula'}=$b;#对Book.xls的第二列赋值。
}
}
}
# clean up after ourselves
$Book->Close;
在Linux或者Unix上操作(生成)Excel,怎么说都是比较困难的困难的事情。但是有cpan,困难迎刃而解了!CPAN上提供了Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel这两个模块。下面我们就来看看 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel的使用方法:
1、首先,我们要在服务器上安装相应的模块
安装 Excel 模块的 PPM 命令
- ppm> install OLE::Storage_Lite
- ppm> install Spreadsheet::ParseExcel
- ppm> install Spreadsheet::WriteExcel
ppm> install OLE::Storage_Lite
ppm> install Spreadsheet::ParseExcel
ppm> install Spreadsheet::WriteExcel
2、使用读取EXCEL文件:
- #!/usr/bin/perl -w
-
- use strict;
- use Spreadsheet::ParseExcel;
-
- my $parser = Spreadsheet::ParseExcel->new();
- my $workbook = $parser->Parse('Book1.xls');
-
- for my $worksheet ( $workbook->worksheets() ) {
-
- my ( $row_min, $row_max ) = $worksheet->row_range();
- my ( $col_min, $col_max ) = $worksheet->col_range();
-
- for my $row ( $row_min .. $row_max ) {
- for my $col ( $col_min .. $col_max ) {
-
- my $cell = $worksheet->get_cell( $row, $col );
- next unless $cell;
-
- print "Row, Col = ($row, $col)/n";
- print "Value = ", $cell->value(), "/n";
- print "Unformatted = ", $cell->unformatted(), "/n";
- print "/n";
- }
- }
- }
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->Parse('Book1.xls');
for my $worksheet ( $workbook->worksheets() ) {
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $cell = $worksheet->get_cell( $row, $col );
next unless $cell;
print "Row, Col = ($row, $col)/n";
print "Value = ", $cell->value(), "/n";
print "Unformatted = ", $cell->unformatted(), "/n";
print "/n";
}
}
}
3、生成EXCEL文件:
- #!/usr/bin/perl -w
-
- use Spreadsheet::WriteExcel;
-
- # 创建一个新的EXCEL文件
- my $workbook = Spreadsheet::WriteExcel->new('test.xls');
-
- # 添加一个工作表
- $worksheet = $workbook->add_worksheet();
-
- # 新建一个样式
- $format = $workbook->add_format(); # Add a format
- $format->set_bold();#设置字体为粗体
- $format->set_color('red');#设置单元格前景色为红色
- $format->set_align('center');#设置单元格居中
-
- #使用行号及列号,向单元格写入一个格式化和末格式化的字符串
- $col = $row = 0;
- $worksheet->write($row, $col, 'Hi Excel!', $format);
- $worksheet->write(1, $col, 'Hi Excel!');
-
- # 使用单元格名称(例:A1),向单元格中写一个数字。
- $worksheet->write('A3', 1.2345);
- $worksheet->write('A4', '=SIN(PI()/4)');
- exit;