У меня есть проблема разбора файла 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");
Я использую 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