perl处理Excel(跨平台)

这篇博客介绍了如何使用Perl处理Excel文件,包括解析和创建Excel。推荐在Windows平台上使用Spreadsheet::ParseExcel模块,而在跨平台环境下使用Spreadsheet::WriteExcel。内容详细解释了这些模块的安装、使用方法,如提取Excel信息、创建新的Excel,以及各种格式和样式设置。此外,还提到了其他一些相关模块,如Spreadsheet::ParseXLSX和Excel::Writer::XLSX。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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


前言

用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; 类,如下:

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

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

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

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

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

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

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

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

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

判断是否存在该excel表格

# error_code() => error()
# ============    =======
# 0 => ''
# 1 => '文件没有找到'
# 2 => '该文件不是标准的excel格式文档'
# 3 => '文件加密了'

if ( !defined $workbook ) { #一般需要判断是否存在该excel表格
    die $parser->error_code(), $parser->error(), ".\n";
}
复制代码
Workbook

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

$workbook->worksheets()
$workbook->worksheet()
$workbook->worksheet_count()
$workbook->get_filename()
复制代码
worksheets()

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

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

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

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

获取sheet表的个数,如下:

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

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

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

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

$worksheet->get_cell()
$worksheet->row_range()
$worksheet->col_range()
$worksheet->get_name()
复制代码
get_cell(row,col)

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

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

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

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

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

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

获取sheet的名称,如下图:

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

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

$cell->value()
$cell->unformatted()
复制代码
value()

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

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

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

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

高级方法 - 提取Excel

Format

获取 单元格格式 ,如下:

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

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

$format->{Font}
$format->{AlignH}
$format->{AlignV}
$format->{Indent}
$format->{Wrap}
$format->{Shrink}
$format->{Rotate}
$format->{JustLast}
$format->{ReadDir}
$format->{BdrStyle}
$format->{BdrColor}
$format->{BdrDiag}
$format->{Fill}
$format->{Lock}
$format->{Hidden}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值