В настоящее время для загрузки приложения Excel в java используется мост java-com с последующей загрузкой книги Excel. Хотя вычисленные значения ячеек извлекаются точно, вскоре после загрузки приложения Excel загрузка ЦП достигает 100% и происходит сбой программы после обработки 5-7 записей. К сожалению, базовый dll, jcom.dll больше не поддерживается и не поддерживается.
Итак, я пытаюсь получить вычисленные значения ячеек из проприетарной электронной таблицы, используя Apache-POI в Java. Формулы и вычисления на листе 0 хранятся в виде указателей на формулы, которые находятся на других скрытых листах в рабочей книге. При получении вычисленного значения код возвращает указатель на скрытый лист и ячейку, содержащую формулу на этом скрытом листе, в виде строки.
Любое предложение получить вычисленное значение или альтернативу POI, если это невозможно сделать в POI?
После запуска кода, показанного ниже, ожидается возрастное значение 39, но результат будет отображаться как
«Неформатированные значения»! AD13
У меня нет прав для вставки изображения калькулятора, разрешена только ссылка на изображение.
public class POICalculator {
public static void main(String[] args) {
// To fill cell values in calculator spreadsheet and
// obtain computed cell value
InputStream ExcelFileToRead;
try {
ExcelFileToRead = new FileInputStream("C:\\temp\\XLS\\NPCalculatorBlack.xls");
HSSFWorkbook wb = new HSSFWorkbook(ExcelFileToRead);
HSSFWorkbook test = new HSSFWorkbook();
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row;
HSSFCell cell;
String examDate = "04/02/2019";
String birthDate = "01/01/1980";
// input cell value for F3
sheet.getRow(2).getCell(5).setCellValue(examDate);
// input cell value for H3
sheet.getRow(2).getCell(7).setCellValue(birthDate);
HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
HSSFFormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
// output computed AGE value from cell B5 - Expected result: 39
String age = sheet.getRow(4).getCell(1).toString();
System.out.println(age);
} catch (Exception e) {
e.printStackTrace();
}
}
}