`
zengshaotao
  • 浏览: 787025 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

perl操作excel

 
阅读更多
#!/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的函数或变量。

如:

 

[plain] view plaincopy
 
  1. $myCell = $sheet->get_cell( $row, $col );  
  2. $aValue =$myCell->value;  
  3. forearch .....{  
  4.     if($myCell->value == ...){#here  
  5.     ....  
  6.     }  
  7. }  

 

 

如果把#here行里的$myCell->value改为$aValue(保证代码运行正确情况下的修改),可以提高效率。

这样的修改有时能提高3、4倍的性能(这个依赖具体情况)。

还有一点要注意,Spreadsheet里行列是从0开始的,OLE里行列是从1开始的

分享到:
评论

相关推荐

    用Perl操作Excel2007 (xlsx) with Excel-Writer-XLSXL

    ### 使用Perl操作Excel 2007 (xlsx) 文件:详解Excel::Writer::XLSX模块 在IT领域,特别是数据分析、报表制作等场景中,能够高效地读写Excel文件是一项重要的技能。Perl作为一种功能强大的脚本语言,在处理文本和...

    perl操作Excel示例

    ### Perl操作Excel示例 #### 简介 在Perl编程语言中,处理Excel文件是一项常见但复杂的任务。为了简化这一过程,`Spreadsheet::WriteExcel`模块被开发出来,它提供了一系列强大的功能来帮助开发者轻松创建、读取、...

    perl Excel操作

    首先,Perl中实现Excel操作主要依赖于第三方模块,如Spreadsheet::ParseXLSX(用于读取Excel 2007及以上版本的xlsx文件)和Spreadsheet::WriteExcel(用于创建Excel文件)。这两个模块可以从CPAN(Comprehensive ...

    perl解析excel文件

    在这个场景中,我们关注的是如何使用Perl来解析Excel文件。Excel文件通常包含表格数据,这对于数据分析、报告生成或自动化工作流程非常有用。Perl提供了多种库来处理这种任务,其中最常用的是Spreadsheet::ParseXLSX...

    perl对excel操作封装函数

    perl对excel的表格处理。其中对New excelRead excelWrite相关操作,方便实用

    Perl读写excel

    Perl是一种强大的脚本编程语言,尤其在处理文本和系统管理任务方面表现突出。在与Excel交互时,Perl可以通过一些特定的库来实现读写Excel文件的功能。...记得查阅这些资料,以便进一步提升你的Perl Excel操作技能。

    perl操作office

    让我们深入了解一下如何使用Perl操作Excel文件: 1. **读取Excel文件**:`read.pl`可能是一个示例脚本,它使用`Spreadsheet::ParseXLS`模块来读取Excel文件(例如`600795.xls`)。以下是一个简单的读取示例: ```...

    Perl中使用Win32_OLE模块读写Excel的方法1

    **使用Win32::OLE模块操作Excel的基本步骤** 1. **初始化**: 使用Win32::OLE模块加载Excel应用程序,并创建一个新的Excel实例。 ```perl use Win32::OLE; my $excel = Win32::OLE->new('Excel.Application', 'Quit'...

    Perl SpreadSheet_Excel

    Perl SpreadSheet_Excel 是一个基于Perl编程语言的库,用于解析和操作Microsoft Excel电子表格文件。这个库的核心组件是 `Spreadsheet::ParseExcel` 模块,它允许开发者读取Excel文件的内容,包括单元格的数据、公式...

    excel-writer-xlsx:用于创建Excel XLSX文件的Perl模块

    它提供了丰富的内置函数和模块,使得处理各种任务变得更加便捷,包括创建和操作Excel文件。 excel-writer-xlsx模块是专门针对XLSX文件格式设计的,XLSX是Microsoft Office Excel 2007及以后版本使用的文件格式,...

    excel_Perl_源码

    标题中的“excel_Perl_源码”表明我们将讨论如何使用Perl编程语言来处理Excel文件,具体来说是关于从数据文件中提取数据并将其转化为Excel表格的过程。Perl是一种强大的文本处理语言,非常适合处理各种数据格式,...

    perl example for read excel

    Excel文件通常包含表格数据,而Perl通过一些库模块,如Spreadsheet::ParseXLSX或Spreadsheet::Read,可以方便地解析和操作这些数据。 `excel.pl` 可能是一个Perl脚本,用于演示如何使用上述提到的库来读取Excel文件...

    Spreadsheet-WriteExcel-2.15.tar.rar

    描述中提到的"spreadsheet can be used to write excel file through language Perl.",这表明Spreadsheet::WriteExcel是Perl的一个模块,它允许开发者在Perl程序中创建和操作Excel电子表格。Perl是一种强大的脚本...

    perl 对文本一些常用操作和常用正则表达式

    Perl可以用来处理Excel文件,虽然示例代码中没有给出完整的Excel操作细节,但可以使用Perl模块如`Excel::Writer::XLSX`来进行更高级的操作。 - **设置列宽**: ```perl $worksheet->set_column(2, 33, 2); ``` - ...

    VB运行perl脚本工具

    Perl是一种功能强大的文本处理和脚本编程语言,尤其在系统管理、网络编程和文本操作方面有广泛的应用。本文将深入探讨如何在VB中集成Perl,以及这一技术的重要性和实现方法。 首先,VB与Perl的结合可以利用Perl的...

    perl Spreadsheet

    另外,结合其他Perl模块(如DBI用于数据库操作),可以实现更复杂的数据流转和处理流程。 综上所述,Perl Spreadsheet是一个强大且灵活的工具,它使得Perl程序员能够轻松地与Excel文件交互,无论是在数据处理、报表...

    perl-site的压缩包

    "perl-site" 指的是 Perl 的模块仓库 Site CPAN ( Comprehensive Perl Archive Network ) 中的模块,这里特指与解析 Excel 文件相关的模块。Site CPAN 是 Perl 社区维护的一个额外的模块存储库,包含了不在标准 CPAN...

    perl SVG包

    结合Perl的其他库,如DBI(数据库接口)或Excel::Writer::XLSX,可以将动态生成的数据可视化,形成直观的报告或分析结果。 `svg_lib`这个文件可能是包含SVG库的一些示例、测试代码或者额外的图形资源。在实际开发中...

    QTxlsx库和需要的perl安装文件

    QTxlsx库是一款基于Qt框架的C++库,专门用于创建和操作Excel(XLSX)文件。这个库为Qt开发者提供了一个简洁的API,让他们能够方便地读取、写入和编辑Excel电子表格数据,而无需依赖Microsoft Office或类似的第三方应用...

    QXls与Perl.zip

    本篇文章将深入探讨如何使用开源库QXls和Perl来操作xlsx格式的Excel文件,以及相关的技术细节。 首先,QXls是Qt框架下的一个库,专门用于处理xlsx文件,无需依赖Microsoft Excel或WPS等应用。Qt是一个跨平台的应用...

Global site tag (gtag.js) - Google Analytics