2017-01-04 3 views
0

У меня есть проблема разбора файла Excel в том же перловый код: Я получаю эту ошибку:Невозможно вызвать метод «лист» на неопределенное значение

"Can't call method "worksheet" on an undefined value at ./parse_pathsim_results.pl line 223"

Интересно, что в перловый код у меня есть, если я проанализируйте другой файл (задержка xls) перед тем, как он намеревается использовать файл xls.

Вот код:

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"); 

ответ

2

Не указывая много информации и только фрагменты кода, это сложно сказать.

Великий подозреваемый сам формат файла, так как метод Parse не возвращает $workbook, анализатор возвращается undef

Недавно у меня была проблема, как это, где файл Excel был совершенно последнюю версию формата. (заканчивается на .xlsx, а не .xls) Открытие файла с помощью MS Excel и сохранение в виде старого формата excel сделали трюк.

Ваш первый файл выглядит так, как если бы он был простым CSV-файлом и поэтому не вызывал проблем с разбором.

+0

Я использую sub для преобразования csv в excel b4 синтаксический анализ, отсутствующий фрагмент кода sub csv2xls { $ input_file = $ _ [0]; $ input_file = ~ s/csv/xls /; $ output_file = join ('', "c2x_", $ input_file); $ workbook = Электронная таблица :: WriteExcel-> new ("./ presto/prs/$ output_file"); $ workheet = $ workbook-> add_workheet(); $ csv = Текст :: CSV_XS-> новый; $ row = 0; while () { if ($ csv-> parse ($ _)) { @Fld = $ csv-> fields; $ col = 0; foreach $ token (@Fld) { $ workheet-> write ($ row, $ col, $ token); $ col ++; } $ row ++; } else { $ err = $ csv-> error_input; } } } csv2xls ("delay.csv"); csv2xls ("slope.csv"); – sumit