#!/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 2007 (xlsx) 文件:详解Excel::Writer::XLSX模块 在IT领域,特别是数据分析、报表制作等场景中,能够高效地读写Excel文件是一项重要的技能。Perl作为一种功能强大的脚本语言,在处理文本和...
### Perl操作Excel示例 #### 简介 在Perl编程语言中,处理Excel文件是一项常见但复杂的任务。为了简化这一过程,`Spreadsheet::WriteExcel`模块被开发出来,它提供了一系列强大的功能来帮助开发者轻松创建、读取、...
首先,Perl中实现Excel操作主要依赖于第三方模块,如Spreadsheet::ParseXLSX(用于读取Excel 2007及以上版本的xlsx文件)和Spreadsheet::WriteExcel(用于创建Excel文件)。这两个模块可以从CPAN(Comprehensive ...
在这个场景中,我们关注的是如何使用Perl来解析Excel文件。Excel文件通常包含表格数据,这对于数据分析、报告生成或自动化工作流程非常有用。Perl提供了多种库来处理这种任务,其中最常用的是Spreadsheet::ParseXLSX...
perl对excel的表格处理。其中对New excelRead excelWrite相关操作,方便实用
Perl是一种强大的脚本编程语言,尤其在处理文本和系统管理任务方面表现突出。在与Excel交互时,Perl可以通过一些特定的库来实现读写Excel文件的功能。...记得查阅这些资料,以便进一步提升你的Perl Excel操作技能。
让我们深入了解一下如何使用Perl操作Excel文件: 1. **读取Excel文件**:`read.pl`可能是一个示例脚本,它使用`Spreadsheet::ParseXLS`模块来读取Excel文件(例如`600795.xls`)。以下是一个简单的读取示例: ```...
**使用Win32::OLE模块操作Excel的基本步骤** 1. **初始化**: 使用Win32::OLE模块加载Excel应用程序,并创建一个新的Excel实例。 ```perl use Win32::OLE; my $excel = Win32::OLE->new('Excel.Application', 'Quit'...
Perl SpreadSheet_Excel 是一个基于Perl编程语言的库,用于解析和操作Microsoft Excel电子表格文件。这个库的核心组件是 `Spreadsheet::ParseExcel` 模块,它允许开发者读取Excel文件的内容,包括单元格的数据、公式...
它提供了丰富的内置函数和模块,使得处理各种任务变得更加便捷,包括创建和操作Excel文件。 excel-writer-xlsx模块是专门针对XLSX文件格式设计的,XLSX是Microsoft Office Excel 2007及以后版本使用的文件格式,...
标题中的“excel_Perl_源码”表明我们将讨论如何使用Perl编程语言来处理Excel文件,具体来说是关于从数据文件中提取数据并将其转化为Excel表格的过程。Perl是一种强大的文本处理语言,非常适合处理各种数据格式,...
Excel文件通常包含表格数据,而Perl通过一些库模块,如Spreadsheet::ParseXLSX或Spreadsheet::Read,可以方便地解析和操作这些数据。 `excel.pl` 可能是一个Perl脚本,用于演示如何使用上述提到的库来读取Excel文件...
描述中提到的"spreadsheet can be used to write excel file through language Perl.",这表明Spreadsheet::WriteExcel是Perl的一个模块,它允许开发者在Perl程序中创建和操作Excel电子表格。Perl是一种强大的脚本...
Perl可以用来处理Excel文件,虽然示例代码中没有给出完整的Excel操作细节,但可以使用Perl模块如`Excel::Writer::XLSX`来进行更高级的操作。 - **设置列宽**: ```perl $worksheet->set_column(2, 33, 2); ``` - ...
Perl是一种功能强大的文本处理和脚本编程语言,尤其在系统管理、网络编程和文本操作方面有广泛的应用。本文将深入探讨如何在VB中集成Perl,以及这一技术的重要性和实现方法。 首先,VB与Perl的结合可以利用Perl的...
另外,结合其他Perl模块(如DBI用于数据库操作),可以实现更复杂的数据流转和处理流程。 综上所述,Perl Spreadsheet是一个强大且灵活的工具,它使得Perl程序员能够轻松地与Excel文件交互,无论是在数据处理、报表...
"perl-site" 指的是 Perl 的模块仓库 Site CPAN ( Comprehensive Perl Archive Network ) 中的模块,这里特指与解析 Excel 文件相关的模块。Site CPAN 是 Perl 社区维护的一个额外的模块存储库,包含了不在标准 CPAN...
结合Perl的其他库,如DBI(数据库接口)或Excel::Writer::XLSX,可以将动态生成的数据可视化,形成直观的报告或分析结果。 `svg_lib`这个文件可能是包含SVG库的一些示例、测试代码或者额外的图形资源。在实际开发中...
QTxlsx库是一款基于Qt框架的C++库,专门用于创建和操作Excel(XLSX)文件。这个库为Qt开发者提供了一个简洁的API,让他们能够方便地读取、写入和编辑Excel电子表格数据,而无需依赖Microsoft Office或类似的第三方应用...
本篇文章将深入探讨如何使用开源库QXls和Perl来操作xlsx格式的Excel文件,以及相关的技术细节。 首先,QXls是Qt框架下的一个库,专门用于处理xlsx文件,无需依赖Microsoft Excel或WPS等应用。Qt是一个跨平台的应用...