Я динамически генерирую файлы XLSX из кода Java, а также задаю формулы.Все работает нормально, за исключением функции IFS (), в то время как всегда кажется, что рендеринг выполняется с использованием строчных букв "ifs ()" и поэтому не распознается libreoffice как функция при открытии результирующего файла.Все остальные формулы, например, простой старый «IF», работают нормально
Я попытался отладить исходный код POI ooxml, и последнее, что я могу сказать, это то, что ячейка правильно установлена в верхнем регистре.Я попытался обновить его до последней версии, предварительно отформатировав содержимое ячейки ... пока что не повезло.Этот код работает на poi 4.0.1, и я открываю файл с помощью libreoffice 6.1.3.2 (на случай, если это может быть проблемой с libreoffice?).У меня нет доступа к EXCEL 2016+, чтобы проверить, как он обрабатывает полученный файл.
public void testIFS(){
try {
String IFSformula = "IFS(1,\"yes\",0,\"no\")";
String IFformula = "IF(1,\"yes\",\"no\")";
String outputFileName = "IFStest.xlsx";
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet poiSheet = workbook.createSheet("ifstest");
XSSFRow row = poiSheet.createRow(0);
XSSFCell cell0 = row.createCell(0);
cell0.setCellFormula(IFSformula);
XSSFCell cell1 = row.createCell(1);
cell1.setCellFormula(IFformula);
workbook.write(new FileOutputStream(outputFileName));
} catch (IOException ex) {
Logger.getLogger(IFSTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
Теперь ячейка 0 заканчивается = ifs (1, "да", 0, "нет")- что неверно (результат #NAME), но ячейка 1 работает нормально и имеет формулу ячейки = IF (1, «да», «нет») (результат «да»).Если я вручную изменю «ifs» на «IFS», формула будет работать нормально, а также покажет «да».