Комплексные числа хранятся в ячейках Excel
как строки.
Например, результатом =COMPLEX(3,4)
будет строка 3+4i
.Это можно прочитать через apache poi
так же, как и другие значения строковых ячеек.
Лучшим подходом является использование DataFormatter
в сочетании с FormulaEvaluator
.
Пример:
Excel:
![enter image description here](https://i.stack.imgur.com/ed3gI.png)
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
?