java - 如何使用 Apache Poi 从 excel 读取复数?

标签 java apache-poi complex-numbers

我想读取一个xlsx文件,其内容是复数。我使用apache poi。但我不知道如何使用这个库从 Excel 读取复数。

最佳答案

复数以字符串形式存储在 Excel 单元格中。

例如,=COMPLEX(3,4) 的结果值将是字符串 3+4i。这也可以通过 apache poi 读取,方式与其他字符串单元格值相同。

更好的方法是将 DataFormatterFormulaEvaluator 结合使用。

示例:

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 中用它做什么?

关于java - 如何使用 Apache Poi 从 excel 读取复数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433698/

相关文章:

c++ - 如何在 C++ 中重载非交换运算符的两种可能性?

java - 数独算法生成 0 个值

java - 为什么要将 ViewHolder 类声明为静态的?

java - 使用 Apache POI 替换相关单元格后评估公式

java - Apache POI 条件格式搜索以某些文本开头的字符串

复杂随机点生成

c++ - 当两个 std::complex 相乘时,为什么调用 __muldc3?

java - 在匿名操作监听器中运行线程?

java - 使用 Prims 算法从邻接列表中查找最小生成树,其中邻接列表位于字符串数组中

java - POI中的空指针问题