gpt4 book ai didi

string - 在 Perl 中使用 Spreadsheet::ParseExcel,但需要帮助

转载 作者:行者123 更新时间:2023-12-03 16:30:01 26 4
gpt4 key购买 nike

我有一个使用 Spreadsheet::ParseExcel 的 Perl 程序。但是,出现了两个困难,我一直无法弄清楚如何解决。该程序的脚本如下:

#!/usr/bin/perl
use strict;
use warnings;
use Spreadsheet::ParseExcel;
use WordNet::Similarity::lesk;
use WordNet::QueryData;

my $wn = WordNet::QueryData->new();
my $lesk = WordNet::Similarity::lesk->new($wn);
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse ( 'input.xls' );

if ( !defined $workbook ) {
die $parser->error(), ".\n";
}

WORKSHEET:
for my $worksheet ( $workbook->worksheets() ) {

my $sheetname = $worksheet->get_name();
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
my $target_col;
my $response_col;

# Skip worksheet if it doesn't contain data
if ( $row_min > $row_max ) {
warn "\tWorksheet $sheetname doesn't contain data. \n";
next WORKSHEET;
}

# Check for column headers
COLUMN:
for my $col ( $col_min .. $col_max ) {

my $cell = $worksheet->get_cell( $row_min, $col );
next COLUMN unless $cell;

$target_col = $col if $cell->value() eq 'Target';
$response_col = $col if $cell->value() eq 'Response';
}

if ( defined $target_col && defined $response_col ) {

ROW:
for my $row ( $row_min + 1 .. $row_max ) {
my $target_cell = $worksheet->get_cell( $row, $target_col);
my $response_cell = $worksheet->get_cell( $row, $response_col);
if ( defined $target_cell && defined $response_cell ) {
my $target = $target_cell->value();
my $response = $response_cell->value();

my $value = $lesk->getRelatedness( $target, $response );

print "Worksheet = $sheetname\n";
print "Row = $row\n";
print "Target = $target\n";
print "Response = $response\n";
print "Relatedness = $value\n";

}
else {

warn "\tWroksheet $sheetname, Row = $row doesn't contain target and response data.\n";
next ROW;
}
}
}
else {

warn "\tWorksheet $sheetname: Didn't find Target and Response headings.\n";
next WORKSHEET;
}
}

所以,我的两个问题:

首先,即使数据存在,有时程序也会返回错误“文件中未找到 Excel 数据”。每个 Excel 文件的格式都相同。只有一张纸,A 列和 B 列分别标记为“目标”和“响应”,下面有一个单词列表。但是,它并不总是返回此错误。它适用于一个 Excel 文件,但不适用于不同的 Excel 文件,即使两者的格式完全相同(是的,它们也是相同的文件类型)。我找不到任何理由不读取第二个文件,因为它与第一个文件相同。唯一的区别是第二个文件是使用 Excel 宏创建的。但是,这有什么关系呢?文件类型和格式完全相同。

其次,变量 '$target' 和 '$response' 需要格式化为字符串,才能使 'my $value' 表达式起作用。如何将它们转换为字符串格式?分配给每个变量的值是 Excel 电子表格相应单元格中的一个单词。我不知道那是什么格式(Perl 中没有明显的方法可供我检查)。

有什么建议么?

最佳答案

关于您的第一个问题,“找不到数据”错误表明文件格式存在问题。我在伪 Excel 文件(例如具有 xls 扩展名的 Html 或 CSV 文件)中看到了此错误。我还看到第三方应用程序生成的格式错误的文件出现此错误。

您可以通过对工作和非工作文件进行 hexdump/xxd 转储并查看整体结构是否大致相同(例如,如果它在开始时具有相似的魔数(Magic Number)并且不是 Html )。

也可能是 Spreadsheet::ParseExcel 的问题。我是那个模块的维护者。如果您愿意,可以通过文档中的电子邮件地址将“好”和“坏”文件发送给我,我会查看它们。

关于string - 在 Perl 中使用 Spreadsheet::ParseExcel,但需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com