Apache POI 库中的公式求值器 不支持 那些函数
时间: 2024-05-31 16:13:37 浏览: 19
Apache POI 库中的公式求值器支持大多数 Excel 中的函数,但不支持一些特定的函数,如下:
1. 动态数组公式(Dynamic Array Formulas)
2. 数组函数(Array Functions)
3. 数据透视表函数(PivotTable Functions)
4. 用户定义函数(User-Defined Functions)
如果公式中使用了以上函数之一,就无法使用 Apache POI 库中的求值器进行求值。
相关问题
阿帕奇 poi库支持sumifs吗?
是的,Apache POI库支持SUMIFS函数。您可以使用org.apache.poi.ss.formula.eval.forked.ForkedEvaluationSheet类来计算公式,该类是在Apache POI 3.17版本中引入的。
您可以使用以下代码示例计算SUMIFS函数:
```
import org.apache.poi.ss.formula.eval.forked.ForkedEvaluationSheet;
import org.apache.poi.ss.formula.eval.forked.ForkedEvaluationWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.HashMap;
import java.util.Map;
public class SumifsExample {
public static void main(String[] args) {
// Create a new workbook
Workbook workbook = new XSSFWorkbook();
// Create a new sheet
ForkedEvaluationSheet sheet = new ForkedEvaluationSheet(workbook.getSheet("Sheet1"));
// Create a new workbook with the same sheets
ForkedEvaluationWorkbook workbookWrapper = new ForkedEvaluationWorkbook(workbook);
// Set up the formula
String formula = "SUMIFS(A1:A10, B1:B10, \"X\", C1:C10, \">=10\")";
// Evaluate the formula
sheet.setWorkbook(workbookWrapper);
sheet.setRow(0, workbook.getSheet("Sheet1").getRow(0));
sheet.setRow(1, workbook.getSheet("Sheet1").getRow(1));
sheet.getCell(0, 0).setCellValue(1);
sheet.getCell(0, 1).setCellValue("X");
sheet.getCell(0, 2).setCellValue(10);
sheet.getCell(1, 0).setCellValue(2);
sheet.getCell(1, 1).setCellValue("Y");
sheet.getCell(1, 2).setCellValue(20);
sheet.getCell(2, 0).setCellValue(3);
sheet.getCell(2, 1).setCellValue("X");
sheet.getCell(2, 2).setCellValue(30);
Map<String, Double> values = new HashMap<>();
values.put("A1", 1.0);
values.put("A2", 2.0);
values.put("A3", 3.0);
values.put("B1", "X");
values.put("B2", "Y");
values.put("B3", "X");
values.put("C1", 10.0);
values.put("C2", 20.0);
values.put("C3", 30.0);
sheet.setActiveCell(0, 3);
sheet.setFormula(formula);
sheet.getCell(0, 3).setCellType(CellType.FORMULA);
sheet.getCell(0, 3).setCachedFormulaResultType(CellType.NUMERIC);
double result = sheet.getCell(0, 3).getNumericCellValue();
// Print the result
System.out.println("SUMIFS result: " + result);
// Close the workbook
try {
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
这个例子计算了A1:A10区域中,B1:B10等于"X"且C1:C10大于等于10的单元格的和。
poi 解析word公式
POI(Poor Obfuscation Implementation)是Apache基金会下的一个开源项目,提供了对Microsoft Office文档格式的解析和生成能力。其中,POI提供了对Word公式的解析功能。
Word公式是在Word文档中插入的数学公式,可以进行各种数学计算和展示。POI库中的XWPF模块可以解析Word文档中的公式,并提供相应的API进行操作和获取公式的相关信息。
要解析Word公式,首先需要使用POI库加载Word文档。可以使用XWPFDocument类加载.docx格式的Word文档,并使用XWPFDocument对象获取文档中的所有段落。
接下来,遍历所有段落,使用XWPFParagraph对象获取段落中的所有文本运行(XWPFRun)。对于每个文本运行,可以通过isOMath()方法判断是否为数学公式。如果是数学公式,则可以使用XWPFMaths构造函数创建一个XWPFMath对象,然后使用XWPFMath对象的getOMathList()方法获取公式列表。
遍历公式列表,可以通过OMath对象的getOMathParaList()方法获取公式中的段落列表。再遍历段落列表,使用XWPFOMathPara对象获取段落中的运行列表,然后使用XWPFOMathRun对象的getText()方法获取运行中的文本内容,即为公式中的具体内容。
通过上述步骤,就可以使用POI库解析Word文档中的公式并获取其中的内容。使用POI库提供的功能,可以实现更多对公式的操作,如修改、删除等。
总之,POI库提供了解析Word公式的功能,通过使用相关的类和方法,我们可以轻松地对Word文档中的公式进行解析和处理。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)