2012-07-03 4 views
2
#!/usr/bin/env perl 
use warnings; 
use strict; 

use Excel::Writer::XLSX; 

my $workbook = Excel::Writer::XLSX->new('perl.xlsx'); 
my $worksheet = $workbook->add_worksheet(); 

$worksheet->write_formula('A1', '=SUM(1, 2, 3, 4)'); 

$workbook->close(); 

До сих пор это отлично работало с LibreOffice. Но сегодня это больше не работает (значение в A1 - 0) - возможно, из-за некоторых LibreOffice-обновлений (LibreOffice 3.5 Build-ID: 350m1 (Build: 402)).Excel :: Writer :: XLSX: проблемы с LibreOffice

Имеет ли occasionally в следующей части документации Excel::Writer::XLSX такие ситуации?

If required, it is also possible to specify the calculated value of the formula. This is occasionally necessary when working with non-Excel applications that don't calculate the value of the formula. The calculated $value is added at the end of the argument list

ответ

1

Excel :: Writer :: XLSX не вычисляет значения формулы, что она пишет. Вместо этого он вставляет 0 и позволяет пользователю указывать значение, если требуется.

Это не отличное решение, но это лучшее, что можно сделать, поскольку вычисление произвольных сложных формул выходит за рамки модуля.

И, в общем, приложения Excel и другие сторонние приложения будут пересчитывать значения формул для отображения.

0

Это настройка в LibreOffice. Вот решение (цитата из here):

LibreOffice намеренно не пересчитывать старые таблицы, , потому что, как формулы обновляются от версии к версии, или между различными электронными таблицами, результаты могут быть разными. Перейдите к Инструменты - Опции - LibreOffice Calc, в разделе «Пересчет по файлу загрузить», измените два раскрывающихся списка «Excel 2007 и новее» и «ODF Таблицы (не сохраняемые LibreOffice)», чтобы «Всегда пересчитывать», , Нажмите «ОК», закройте электронную таблицу и LibreOffice. Теперь откройте файл в LibreOffice, и вы увидите, что формулы пересчитаны.

Также зайдите в Инструменты - Содержимое ячейки и убедитесь, что выбран AutoCalculate.