2010-03-25 7 views
4

Я пытаюсь установить формулу ячейки, которая ссылается на ячейки из других книг. Однако, когда я открываю программно сгенерированную книгу, ячейки формулы отображаются как #REF !. Я распечатываю формулы, которые были сгенерированы в журнале. Если вырезать и вставить ту в клетки, число от внешних рабочих книг втягиваются.Java apache poi, устанавливающий формулу ячейки

 String formula = "'C:\\tmp\\ForecastAggregate\\Total Products\\[ForecastWorksheet.xls]2010 Budget'!C10"; 
     HSSFCell cell = row.createCell(0); //row was created above 
     cell.setCellFormula(formula); 

Может anybode помочь?

ответ

0

Пробовал озираясь, но только информация, которую я мог бы найти для этого вопроса это сообщение об ошибке Apache, который показывает, что это давняя ошибка:

https://issues.apache.org/bugzilla/show_bug.cgi?id=46670

Хотя ссылки на другие листы в пределах одного Учебное пособие, кажется, работает без проблем

1

Я дал быстрый тест чтения формулы из листа, и он вышел без одинарных кавычек, так как:

[test.xls] testsheet A1

Когда я попытался установить, что в формуле, однако, я получил сообщение об ошибке:

Исключение в потоке «основной» java.lang.RuntimeException: Никакая внешняя рабочая книга с именем «Ссылки test.xls», казалось бы предложить , когда вы читаете формулу, использующую внешнюю ссылку, вам нужно загрузить книгу в средство оценки формулы и настроить среду. Тем не менее, я попытался это, но он все еще не работает ... но это может быть что-то, чтобы посмотреть на:

// Set up the workbook environment for evaluation 
HSSFFormulaEvaluator ev = new HSSFFormulaEvaluator(testwb); 
String[] workbookNames = { "test.xls", }; 
HSSFFormulaEvaluator[] evaluators = { ev, }; 
HSSFFormulaEvaluator.setupEnvironment(workbookNames, evaluators); 

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.html

1

Вы можете работать вокруг этой проблемы с использованием динамической оценки ВЗ ссылки , через функцию INDIRECT.

Функция INDIRECT оценивает значение ячейки, где ячейка для оценки извлекается из значения другой ячейки.

Например,

  1. в ячейке A1, поместите ссылку на ячейку в виде простого текста (не формула), например, " 'C: \ TMP \ ForecastAggregate \ Всего товаров \ [ForecastWorksheet.xls] 2010 Бюджет' C10"
  2. В А2, ячейка, где вы хотите, значение этого ссылочного ячейке появится, поместите формулу

    = INDIRECT (A1)

Это будет извлекать целевую ячейку из A1 и отображать ее значение в A2.

В Java вы можете настроить шаблон, в котором вы создадите отдельный рабочий лист (например, «косвенный Ref») для управления косвенностями. Всякий раз, когда вы пишете внешнюю ссылку на ячейку, вы вместо этого пишете INDIRECT (xx) и помещаете ссылку в ячейку xx на лист «косвенный Ref». Учитывая, что Poi - это в основном интерфейсы, вы можете сделать это прозрачно без изменений кода в вашем java-файле.

В Excel также есть макрос ОЦЕНКИ, который динамически оценивает формулы, которые будут еще проще работать, но это официально недокументировано (но широко документировано в другом месте!), и он может не поддерживаться во всех версиях Office.

Надеюсь, это поможет!