나는 Spreadsheet :: ParseExcel을 사용하여 Perl 프로그램을 가지고있다. 그러나 해결 방법을 찾을 수 없다는 두 가지 어려움이 있습니다.Perl에서 Spreadsheet :: ParseExcel 사용하기, 도움이 필요함
#!/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 매크로를 사용하여 두 번째 파일을 만들었습니다. 그러나 왜 그렇게 중요할까요? 파일 형식과 형식은 완전히 동일합니다.
두 번째로, '$ target'및 '$ response'변수는 'my $ value'표현식이 작동하려면 문자열로 형식화해야합니다. 문자열 형식으로 변환하려면 어떻게해야합니까? 각 변수에 할당 된 값은 Excel 스프레드 시트의 해당 셀에있는 단어입니다. 어떤 형식인지는 알지 못합니다. (그리고 Perl에서는 확인할 방법이 없습니다).
제안 사항?
잘 형식화 된 변경 코드를 확인하십시오! – Zaid