Как читать содержимое ячейки NT формулы в Perl

У меня есть следующий код в Perl, который открывает файл Excel и читает строку: столбец, что я хочу получить, это содержимое ячейки, а не формулы, get_cell (0,1) и (1,1) и (2,1) имеет некоторую формулу и значение, меня не интересует формула, только содержимое ячейки или значение, которое было возвращено формулой, скажем, если строка:1:0 равно 200, тогда мне нужно прочитать 200, а не формулу клетка! может ли несколько хороших людей вернуться ко мне по этому вопросу.. спасибо заранее..

            some code above
            use Spreadsheet::ParseExcel
    $workbook = $parser->parse("$dir/$file");
    $worksheet = $workbook->worksheet('Sheet1');

    $total = $worksheet->get_cell(0,1);
    $pass  = $worksheet->get_cell(1,1);
    $fail  = $worksheet->get_cell(2,1);

    # Print the cell value when not blank
    $total = $total->value();
    $pass = $pass->value();
            $fail = $fail->value();

2 ответа

Решение

value() Метод возвращает по желанию результат формулы, а не саму формулу. Я только что проверил это сам с простым =1+1 формула в клетке и тому value() возвращается 2,

Если файл Excel, который вы читаете, ранее был создан Spreadsheet::WriteExcel, то есть известная проблема: этот модуль не может прочитать значения формул из файлов, созданных с помощью Spreadsheet::WriteExcel, если пользователь не указал значения при создании файла (что обычно не так). Причина этого заключается в том, что Spreadsheet::WriteExcel записывает формулу, но не результат формулы, поскольку он не может вычислять произвольные формулы Excel без доступа к механизму формул Excel.

Я нашел это с помощью

      use Spreadsheet::XLSX;
      my $excel = Spreadsheet::XLSX->new("$filename");
      my ($sheet) = @{ $excel->{Worksheet} };
      print $sheet->{Cells}[0][1]{Val}, "\n";
Другие вопросы по тегам