Как читать сложные номера из Excel с Apache Poi? - PullRequest
0 голосов
/ 20 мая 2018

Я хочу прочитать файл xlsx, который содержит сложный номер. Я использую apache poi.Но я не знаю, как читать комплексные числа из Excel с помощью этой библиотеки.

1 Ответ

0 голосов
/ 20 мая 2018

Комплексные числа хранятся в ячейках Excel как строки.

Например, результатом =COMPLEX(3,4) будет строка 3+4i.Это можно прочитать через apache poi так же, как и другие значения строковых ячеек.

Лучшим подходом является использование DataFormatter в сочетании с FormulaEvaluator.

Пример:

Excel:

enter image description here

Java:

import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;

class ExcelReadCOMPLEX {

 public static void main(String[] args) throws Exception {

  DataFormatter formatter = new DataFormatter();

  Workbook workbook = WorkbookFactory.create(new FileInputStream("COMPLEX.xlsx"));

  FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();

  Sheet sheet = workbook.getSheetAt(0);
  Row row = sheet.getRow(1);
  Cell cell;
  for (int c = 0 ; c < 3; c++) {
   cell = row.getCell(c);
   System.out.println(cell.getCellFormula()); //COMPLEX(3,4), IMREAL(A2), IMAGINARY(A2)
   System.out.println(formatter.formatCellValue(cell, evaluator)); //3+4i, 3, 4
  }

  String[] formulas = new String[]{"COMPLEX(5, -6)", "IMREAL(INDEX(A:A, ROW()))", "IMAGINARY(INDEX(A:A, ROW()))"};
  row = sheet.createRow(2);
  for (int c = 0 ; c < 3; c++) {
   cell = row.createCell(c);
   cell.setCellFormula(formulas[c]);
   System.out.println(cell.getCellFormula());
   System.out.println(formatter.formatCellValue(cell, evaluator)); //5-6i, 5, -6
  }

  workbook.close();

 }
}

Результат выводится на stdout:

COMPLEX(3,4)
3+4i
IMREAL(A2)
3
IMAGINARY(A2)
4
COMPLEX(5, -6)
5-6i
IMREAL(INDEX(A:A, ROW()))
5
IMAGINARY(INDEX(A:A, ROW()))
-6

Вопрос в том, что тогда?Что вы хотите сделать с этим в Java?

...