Формулы именованных областей JXL отображают неверное значение - PullRequest
2 голосов
/ 23 июня 2011

Я использую JXL для написания отчета в формате Excel.Мне нужно использовать именованные области для отчета, и иметь формулы, основанные на них.Однако при загрузке файла Excel отображаемые значения отображаются неверно.Если я нажму на ячейку и нажму клавишу ввода, значение изменится и будет правильным.Я не могу понять, как правильно отобразить значение при загрузке.Кто-нибудь знает способ заставить Excel переоценить или предоставить значение по умолчанию для формулы?

Ниже приведена упрощенная версия моего кода:

excelWorkbook.addNameArea("NamedArea", excelSheet, column1, row1, column2, row2);
Formula formula = new Formula(columnNumber, rowNumber, "COUNT(NamedArea)");
excelSheet.addCell(formula);

Ответы [ 4 ]

3 голосов
/ 06 ноября 2012

У меня также была проблема с некоторыми полями формулы, не имеющими правильных значений, и я не нашел решения онлайн. С помощью самостоятельного исследования я обнаружил, что если, например, у вас есть следующая формула в ячейке

Formula frmla = new Formula(col2, row0, "SUM(A1+A2)");
excelSheet.addCell(frmla);

Следующее не приведет к результату в ячейке формулы из-за использования метки:

Label lbl1 = new Label(col0, row0, "5", wrtbleCellFrmt);
Label lbl2 = new Label(col1, row0, "5", wrtbleCellFrmt);

Следующее даст правильные результаты из-за использования jxl.write.number:

jxl.write.Number number1 = new jxl.write.Number(col0, row0, 5, wrtbleCellFrmt);
jxl.write.Number number2 = new jxl.write.Number(col0, row0, 5, wrtbleCellFrmt);

Метка принимает параметр String, а Number принимает значение Double, что, вероятно, является причиной правильных результатов.

0 голосов
/ 27 ноября 2013

Ошибка # ЗНАЧЕНИЕ пришла ко мне сегодня тоже.Вот эта формула:

=COUNTIF('list1'!A9:'list1'!AE9,>0)

Когда я нажал F2 и ввел в эту ячейку, он рассчитал это хорошо, но до того, как он показал ошибку: «Значение, используемое в этой формуле, имеет неправильный тип данных»

Я использовал числовой класс для ввода чисел в эту область, но я обнаружил, что если в этом диапазоне есть только один пустой пробел (если вы не присваиваете значение всем в этом диапазоне), он будетпокажите эту ошибку в электронной таблице позже.

Решение:

Я переместил формулу в тот же список1, в ячейку AF9:

=COUNTIF(A9:AE9,>0) 

, чтобы вычислитьсначала), а затем скопировал только вычисленное значение AF9 в другой список

='list1'!AF9

После этого все работало нормально и больше не показывалось #VALUE.

0 голосов
/ 26 июня 2011

К сожалению, похоже, что на самом деле нет решения для этого.Я думаю, что это проблема в JXL.Я думаю, по какой-то причине названные области не устанавливаются до тех пор, пока формулы не будут оценены.

0 голосов
/ 24 июня 2011

Может быть, это поможет. Найдите метод setAutomaticFormulaCalculation:

http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/index.html

...