Как читать содержимое ячейки 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";