помогите пожалуйста решить мою проблему в apache poi и excel - PullRequest
1 голос
/ 31 августа 2010

Я использую apache poi и java для манипуляций с Excel. Я изменил некоторые ячейки в файле Excel, программно используя java.

После этого, когда я открываю этот файл Excel вручную для просмотра этого обновления. После просмотра, когда я пытаюсь закрыть файл Excel, он снова спрашивает меня: «Вы хотите сохранить изменения, сделанные в файле test.xls?».

Если я нажму кнопку «Да», то только я смогу читать значения ячейки формулы программно. В противном случае, если я получу доступ к значению ячейки формулы, будет возвращено значение 0 ...

Как решить эту проблему ....

Пожалуйста, помогите мне получить это решение.

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

По умолчанию POI считывает кэшированный ответ на формулу, когда вы читаете эту ячейку.Когда вы откроете файл в Excel, он выполнит вычисления.Затем, когда вы сохраняете файл, ответы сохраняются вместе.Затем, когда вы прочитаете его с помощью poi, вы получите правильные ответы.

Если вы хотите получить «правильный» ответ, вам нужно вычислить ответ по формуле.В прошлый раз, когда мне нужно было сделать это, я должен был написать свой собственный синтаксический анализатор, но теперь есть это: http://poi.apache.org/spreadsheet/eval.html.

Или короче:

Workbook wb = new HSSFWorkbook(inputstream);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
... snip ...
CellValue value = evaluator.evaluate(cellWithFormula);
0 голосов
/ 17 июля 2013

Пока не могу оставлять комментарии, поэтому я оставлю новый ответ. Джори ответ правильный только для одной ячейки

Для нескольких ячеек более эффективно использовать следующее:

FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
fe.evaluateAll();

Что фактически обновит значение кэшированной формулы.

Затем, чтобы получить их, вы будете делать то же самое, что и для любой другой ячейки, например:

cell.getCellStringValue();

Этот метод стоит использовать, если вам нужно пересмотреть всю книгу целиком.

Обратите внимание, что в тот день, когда я пишу, только POI 3.10-бета1 версия POI может оценивать формулы с использованием дат

...