当前位置:   article > 正文

perl处理Excel(跨平台)

perl row_range

前言

更多内容,请访问我的 个人博客


前言

用perl处理excel有两种流行的模块:一种是 win32:OLE 模块,优点是功能强大,在excel上能做的事情用这个模块都能做,缺点是无法跨平台,必须在win系统上使用且必须安装office软件;另一种是 Spreadsheet 模块,优点是跨平台,不依赖系统和软件,缺点是功能不是很多,但基本功能都能实现。

如果在win平台处理excel,建议使用 win32:OLE 模块(教程传送门),本文主要讲解 Spreadsheet 模块的使用方法。

了解

Spreadsheet::ParseExcelSpreadsheet::WriteExcel 的官方资料中我们可以知道:

Spreadsheet::ParseExcel
  • 是用于提取excel信息
  • 仅支持Excel 95-2003格式
Spreadsheet::WriteExcel
  • 是用于新建excel信息
  • 仅支持Excel 97-2007格式

也就是说,如果想更好的支持 xlsx 格式的excel需要用到 Spreadsheet::ParseXLSXExcel::Writer::XLSX 模块。

另外, Spreadsheet::ParseExcel::SaveParser 可以支持在已存在的 xls 表中修改数据,但是支持效果远没有 win32:OLE 模块强大,修改之后的表格会丢失部分不支持的宏命令和表格等,最遗憾的是仅支持 xls ,并不支持 xlsx

安装模块

在终端中输入 sudo perl -MCPAN -e "install 'Spreadsheet::ParseExcel'" ,回车,如下图:

若出现如下图,则安装成功:

使用方法 - 提取Excel

引用 use Spreadsheet::ParseExcel; 类,如下:

  1. use Spreadsheet::ParseExcel;
  2. 复制代码
Parser
new()

new()方法可以新建一个提取类,如下:

  1. my $parser = Spreadsheet::ParseExcel->new(); #新建提取类
  2. 复制代码

若是2007版以上的excel,则需要用到 Spreadsheet::ParseXLSX ,如下:

  1. use Spreadsheet::ParseXLSX; #引用
  2. my $parser = Spreadsheet::ParseXLSX->new(); #新建xlsx提取类
  3. 复制代码

若excel需要密码才能打开,则新建密码提取类,如下:

  1. $parser = Spreadsheet::ParseExcel->new( Password => 'secret' ); #若excel需要密码才能打开,则新建密码提取类
  2. 复制代码
parse($filename)

获取excel表的工作薄,若无则返回 under

  1. my $workbook = $parser->parse('Book1.xls'); #获取excel表的工作薄,若无则返回 `under`
  2. 复制代码
error()

判断是否存在该excel表格

  1. # error_code() => error()
  2. # ============ =======
  3. # 0 => ''
  4. # 1 => '文件没有找到'
  5. # 2 => '该文件不是标准的excel格式文档'
  6. # 3 => '文件加密了'
  7. if ( !defined $workbook ) { #一般需要判断是否存在该excel表格
  8. die $parser->error_code(), $parser->error(), ".\n";
  9. }
  10. 复制代码
Workbook

Spreadsheet::ParseExcel::Workbook 是由 Spreadsheet::ParseExcelparse() 方法获得,有如下几种常用方法(完整方法使用传送门):

  1. $workbook->worksheets()
  2. $workbook->worksheet()
  3. $workbook->worksheet_count()
  4. $workbook->get_filename()
  5. 复制代码
worksheets()

循环获取所有的sheet表,如下:

  1. for my $worksheet ( $workbook->worksheets() ) {
  2. #循环获取所有的sheet表
  3. ...
  4. }
  5. 复制代码
worksheet()

通过sheet表名或表索引获取单一sheet表,若无则返回 under ,如下:

  1. $worksheet = $workbook->worksheet('Sheet1'); #获取名为"Sheet1"的sheet表
  2. $worksheet = $workbook->worksheet(0); #获取第一张sheet表
  3. 复制代码
worksheet_count()

获取sheet表的个数,如下:

  1. my $worksheet_count = $workbook->worksheet_count(); #获取sheet表的个数
  2. 复制代码
get_filename()

获取excel表的全路径+名称,如下:

  1. my $filename = $workbook->get_filename(); #获取excel表的全路径+名称
  2. 复制代码
Worksheet

Spreadsheet::ParseExcel::Worksheet 是由 worksheets()worksheet() 方法获得,有如下几种常用方法(完整方法使用传送门):

  1. $worksheet->get_cell()
  2. $worksheet->row_range()
  3. $worksheet->col_range()
  4. $worksheet->get_name()
  5. 复制代码
get_cell(row,col)

由指定行和列获取单元格,若不存在则返回 under ,如下:

  1. my $cell = $worksheet->get_cell($row, $col); #由指定行和列获取单元格
  2. 复制代码
row_range()

返回一个二元列表 ($min, $max) ,表示行数的最小值和最大值,如下图:

  1. my ( $row_min, $row_max ) = $worksheet->row_range(); #行数的最小值和最大值
  2. 复制代码
col_range()

返回一个二元列表 ($min, $max) ,表示列数的最小值和最大值,如下图:

  1. my ( $col_min, $col_max ) = $worksheet->col_range(); #列数的最小值和最大值
  2. 复制代码
get_name()

获取sheet的名称,如下图:

  1. my $name = $worksheet->get_name(); #获取sheet的名称
  2. 复制代码
Cell

Spreadsheet::ParseExcel::Cell 有如下几种常用方法(完整方法使用传送门):

  1. $cell->value()
  2. $cell->unformatted()
  3. 复制代码
value()

获取单元格的值(有格式)。例如,在单元格中输入数字 123 ,单元格显示为 123.00 , 方法value() 的返回值为 123.00 。如下:

  1. my $value = $cell->value(); #获取单元格的值(有格式)
  2. 复制代码
unformatted()

获取单元格的值(无格式)。例如,在单元格中输入数字 123 ,单元格显示为 123.00 ,方法 unformatted() 的返回值为 123 。如下:

  1. my $value = $cell->unformatted(); #获取单元格的值(有格式)
  2. 复制代码

高级方法 - 提取Excel

Format

获取 单元格格式 ,如下:

  1. my $format = $cell->get_format(); #获取单元格格式
  2. 复制代码

Spreadsheet::ParseExcel::Format 类有如下方法:

  1. $format->{Font}
  2. $format->{AlignH}
  3. $format->{AlignV}
  4. $format->{Indent}
  5. $format->{Wrap}
  6. $format->{Shrink}
  7. $format->{Rotate}
  8. $format->{JustLast}
  9. $format->{ReadDir}
  10. $format->{BdrStyle}
  11. $format->{BdrColor}
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/316291
推荐阅读
相关标签
  

闽ICP备14008679号