【问题标题】:Can't call method "worksheet" on an undefined value无法在未定义的值上调用方法“工作表”
【发布时间】:2017-05-18 04:49:04
【问题描述】:

我在同一 perl 代码中解析 excel 文件时遇到问题: 我收到此错误:

“无法在未定义的值上调用方法“工作表” ./parse_pathsim_results.pl 第 223 行"

有趣的是,如果我在预期的斜率 xls 文件之前解析另一个文件(延迟 xls),则我的 perl 代码可以工作。

代码如下:

use Spreadsheet::ParseExcel::SaveParser;  
$input_delay_csv_file = "./presto/prs/c2x_delay.xls";
$input_slope_excel_file = "./presto/prs/c2x_slope.xls";
$slope_parser = Spreadsheet::ParseExcel::SaveParser->new();
$delay_parser = Spreadsheet::ParseExcel::SaveParser->new();

如果我使用以下两行代码可以工作,但我不想这样做。

$workbook = $delay_parser->Parse("$input_delay_csv_file");  
$worksheet = $workbook->worksheet("Sheet1");

如果上面两行被注释掉,就会出现问题。

$new_workbook = $slope_parser->Parse("$input_slope_excel_file");   
$worksheet = $new_workbook->worksheet("Sheet1");

【问题讨论】:

    标签: excel perl parsing


    【解决方案1】:

    如果没有你提供太多信息并且只有你的代码的 sn-ps,这很难说。

    最大的怀疑是文件格式本身,因为Parse 方法不返回$workbook,解析器返回undef

    我最近遇到了这样的问题,其中 excel 文件是一个相当新的格式版本。 (以 .xlsx 而不是 .xls 结尾)用 MS Excel 打开文件并保存为旧的 excel 格式就可以了。

    您的第一个文件看起来就像是一个普通的 CSV 文件,因此解析没有问题。

    【讨论】:

    • 我用sub将csv转为excel b4解析,缺少一段代码 sub csv2xls { $input_file = $_[0]; $input_file =~ s/csv/xls/; $output_file = join ('', "c2x_", $input_file); $workbook = Spreadsheet::WriteExcel->new("./presto/prs/$output_file"); $worksheet = $workbook->add_worksheet(); $csv = 文本::CSV_XS->new; $行 = 0; while () { if ( $csv->parse($_) ) { @Fld = $csv->fields; $col = 0; foreach $token (@Fld) { $worksheet->write( $row, $col, $token ); $col++; } $行++; } 其他 { $err = $csv->error_input; } } } csv2xls("delay.csv"); csv2xls("slope.csv");
    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多