#!/usr/bin/perl -w
#用Spreadsheet::ParseExcel 显示一个工作薄的所有表的内容。
use strict;
use warnings;
use Spreadsheet::ParseExcel;
my $file = 'Demo.xls';
my $book = Spreadsheet::ParseExcel::Workbook->Parse( $file);
my @sheets = @{ $book->{Worksheet} };
foreach my $sheet ( @sheets ){
my $sheetName = $sheet->get_name();
print "工作表: $sheetName\n";
my ( $minRow, $maxRow ) = $sheet->row_range();
my ( $minCol, $maxCol ) = $sheet->col_range();
foreach my $row ( $minRow .. $maxRow ){
foreach my $col ( $minCol .. $maxCol ){
my $cell = $sheet->get_cell( $row, $col );
next unless $cell;
print " ($row,$col) ", $cell->value;
}
print "\n";
}
}
|
再来段写Excel的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/perl -w
#用Spreadsheet::WriteExcel,生成乘法表,实际从第2行第2列开始,因为0行0列才是第一行第一列。
use strict;
use warnings;
use Spreadsheet::WriteExcel;
my $file = 'Demo_write.xls';
my $sheetName = 'My sheet';
my $book = new Spreadsheet::WriteExcel( $file );
my $sheet = $book->add_worksheet( $sheetName );
foreach my $row (1 .. 9){
foreach my $col (1 .. 9){
$sheet->write($row, $col, ($row * $col) );
}
}
$book->close();
|
对这个不是太熟,但从目前我了解情况看,Spreadsheet只能分别读写,不能对一个工作簿既读又写。
如果想既读又写,还得找Microsoft,用OLE。
这里只是简单演示一下用法,还是像上面一样分别来看看读写操作,不混合读写。
用OLE读Excel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/usr/bin/perl -w
#用OLE,显示一个工作薄的所有表的内容。
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');
my $file = 'Demo.xls';
my $value = 0;
my $book = $Excel->Workbooks->Open( $file );
foreach my $Sheet (in $book->{Worksheets})
{
my $sheetName = $Sheet->{Name};
print "工作表: $sheetName\n";
my $minRow = 1;
my $maxRow = $Sheet->UsedRange->Rows->Count;
my $minCol = 1;
my $maxCol = $Sheet->UsedRange->Columns->Count;
printf("row,col:%d,%d\n",$maxRow,$maxCol);
foreach my $row ( $minRow .. $maxRow ){
foreach my $col ( $minCol .. $maxCol ){
my $cell_value = $Sheet->Cells($row,$col)->{Value};
next unless defined $cell_value;
print " ($row,$col) ", $cell_value;
}
print "\n";
}
}
$book->Close();
$Excel->Quit();
|
用OLE写Excel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/usr/bin/perl -w
#用OLE 操作excel,生成乘法表。
use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3; # die on errors...
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
my $excelfile = "Demo4.xls";
my $Book = $Excel->Workbooks->Add();
$Book->SaveAs($excelfile); #Good habit when working with OLE, save+often.
my $Sheet = $Book->Worksheets("Sheet1");
$Sheet->Activate();
foreach my $row (1 .. 9){
foreach my $col (1 .. 9){
$Sheet->Cells($row,$col)->{Value} = ($row * $col);
}
}
# my $Chart = $Sheet->ChartObjects->Add(200, 200, 200, 200);
$Book->Save();
$Book->Close();
$Excel->Quit();
|
到底用哪种好呢?这要看情况:
1.非windows环境,不能用OLE。多平台下,Spreadsheet可用性更好。
2.在windows下,同样水平的代码,用OLE效率更高一些。
3.Spreadsheet用起来更简单一些,OLE要考虑的东西要多些。
对一个约一万行左右,200多列的工作表进行读取并处理,Spreadsheet用了30s左右,OLE用了18s左右。
在Perl程序里处理Excel要注意,尽量少调用Excel的函数或变量。
如:
- $myCell = $sheet->get_cell( $row, $col );
- $aValue =$myCell->value;
- forearch .....{
- if($myCell->value == ...){#here
- ....
- }
- }
如果把#here行里的$myCell->value改为$aValue(保证代码运行正确情况下的修改),可以提高效率。
这样的修改有时能提高3、4倍的性能(这个依赖具体情况)。
还有一点要注意,Spreadsheet里行列是从0开始的,OLE里行列是从1开始的
相关推荐
perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例perl操作Excel示例....够20字了吗
用Perl操作Excel2007 (xlsx) with Excel-Writer-XLSXL
perlperl Excel操作
perl对excel的表格处理。其中对New excelRead excelWrite相关操作,方便实用
讲解perl中读写excel用到的库函数,以及如何使用库函数进行操作。
引言脚本语言,其目的是将 Unix shell 的易用性和编程语言( 比如 C) 的功能与可塑性结合起来。它最初只是 Unix 系统管理员的一个工具, 在工作日
包含perl对文本的一些常用操作,字符串的操作,excel的操作。相关函数的操作,和经常用到的一些正则表达式~~~(本人平常用到的一点收集,供用perl开发的朋友参考一下)
Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。 关键字: Python、Excel、xlrd、xlwt、...
小型而快速的perl脚本,用于将来自MS Excel(.xlsx和.xls)的记录直接注入Elasticsearch。 通过使用Kibana导入现有的Excel数据和图表来进行快速演示非常有用。 完成了一些内置的自动化操作,以使用字段名称直接...
Spreadsheet::WriteEXcel安装包 下载 Spreadsheet-WriteExcel-2.40.tar.gz并解压在DBI-1.13中 ...和安装cpan一样,在目录中执行以下操作: perl Makefile.PL make make test make install make clean
在perl中如何操作Excel,相当有用,
Qt操作xlsx格式Excel所需开源库,该库无需调用excel和wps,可以直接读取写xlsx文件。效率高
Win32::OLE安装模块,可以导入perl,以关键词use Win32::OLE开头,即可在perl调用相应函数来操作excel
xlslib是一个用于读写Microsoft Excel文件(XLS和XLSX格式)的C++库。...总而言之,xlslib库是一个强大而灵活的C++库,提供了创建和操作Excel文件的完整功能,是开发者创建高质量Excel文件的理想选择。
使用它可以远离微软的office环境,单独操作xlsx表格文件。 @1 下载 QtXlsxWriter @2 我的系统默认自带perl。 Note: Perl is needed in this step. Download the source code. Put the source code in any ...
2、QXlsx是比较好用的可以操作excel文件的库,以前项目基于Qt5,现在新开的项目基于Qt6,因此重编编译了这个库,附带了修改后的源码,可以适配Qt6的版本,自己编译前需要先安装perl才能顺利编译...
Thruk 是一个独立的多后端监控的 Web 接口,当前支持 Nagios, Icinga 和 Shinken (通过 Livestatus 插件)。其目标是 100% 覆盖监控系统的所有功能。 主要特性: 多后端支持 ... 灵活的操作面板
ASP.NET是微软.NET战略中的一个重要成员,除了可以使用Visual C#、VB.NET、VisualC++.NET、JScript.NET等语言编写外,还可以使用第三方的.NET接口(如COBOL.NET、 Perl.NET等)进行编写。本书通过100个精彩实例...
ASP NET是微软.NET战略中的一个重要成员 除了可以使用Visual C# VB.NET VisualC++ NET JScript.NET等语言编写外 还可以使用第三方的.NET接口 如COBOL.NET Perl.NET等 进行编写 本书通过100个精彩实例 由浅入深...
5.广泛的操作系统,Web服务器和编程语言支持 后台支持Windows,Linux,Unix等各种操作系统;支持IIS,Domino,Websphere,Apache等所有后台服务器类型和JSP,ASP,PHP,PERL等编程语言。 6.支持手写签名和加密的电子...