You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl如何通过工作表名称而非编号读取Excel文件内容

实现方案

你代码的核心错误是Spreadsheet::Read的ReadData返回值为数组引用结构,不支持->sheet()对象调用方法,按以下两种方式修改即可实现按工作表名称读取:

方法1:继续使用现有Spreadsheet::Read模块

无需更换依赖,利用返回结构中的元数据映射工作表名即可:

use Spreadsheet::Read qw(ReadData rows);

my $book  = ReadData ("test.xls");
# 从工作簿元信息中获取表名对应的序号
my $sheet_idx = $book->[0]{sheet}{name_3};
die "指定工作表name_3不存在" unless defined $sheet_idx;
# 按序号获取工作表
my $sheet = $book->[$sheet_idx];
my @rows = rows ($sheet);
# 后续处理行数据

方法2:切换为Spreadsheet::ParseExcel模块

如果后续需要更精细化的Excel操作,可使用该模块直接支持按名称取工作表:

use Spreadsheet::ParseExcel;

my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('test.xls');
die "Excel文件解析失败:" . $parser->error() unless defined $workbook;

# 直接通过名称获取工作表
my $worksheet = $workbook->worksheet('name_3');
die "指定工作表name_3不存在" unless defined $worksheet;

# 遍历读取所有行数据
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min .. $row_max) {
    my @current_row;
    for my $col ($col_min .. $col_max) {
        my $cell = $worksheet->get_cell($row, $col);
        push @current_row, $cell ? $cell->value() : '';
    }
    # 此处处理当前行数据@current_row
}

注意事项

  • 若需要处理.xlsx格式文件,将Spreadsheet::ParseExcel替换为Spreadsheet::XLSX即可,二者调用逻辑完全一致
  • 工作表名称匹配区分大小写,需确认传入的表名与Excel内实际名称完全一致

内容的提问来源于stack exchange,提问作者user16121622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 22:15:01