gpt4 book ai didi

java - 需要有关 apache poi api 中的数组公式实现的帮助

转载 作者:行者123 更新时间:2023-12-02 06:55:30 64 4
gpt4 key购买 nike

我获得了现有项目的分配更新。以前的开发人员使用 jcom api 将数据导出到 Excel 表格。但 jcom api 不适用于 64 位系统。我决定更改代码并使用 apache poi api。我设法做了很多方法。我的问题是数组公式。我需要使用 apache poi 实现数组公式。这些公式发布在下面,任何帮助都会更加明显。提前谢谢大家。

公式:

String  formula1 = "SUM(R[-2]C/1.200)";//net income  calculation from gross income
String formula2 = "SUM(R[-1]C-R[1]C)";
String formula3 = "SUM(R[-" + Integer.toString(listTypeTotals.size()+1) + "]C:R[-2]C)";

我尝试将该单元格设置为公式类型并将公式作为字符串传递。

setCellFormulaStyle(sheet, 4, i+2, formula2);

public static void setCellFormulaStyle(HSSFSheet sheet,int row, int column,String value)
{
HSSFRow temprow = null;
temprow =getRow_CreateRow(sheet, row);
temprow.createCell(column).setCellFormula(value);
}

public static HSSFRow getRow_CreateRow(HSSFSheet sheet,int row)
{
HSSFRow excelrow=null;
excelrow = sheet.getRow(row);
if(excelrow==null)
{
excelrow =sheet.createRow(row);
return excelrow;
}else
return excelrow;
}

我遇到以下异常

org.apache.poi.ss.formula.FormulaParseException: Specified named range 'R' does not exist in the current workbook.
at org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:569)
at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:517)
at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:268)
at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1119)
at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1079)
at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1066)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1426)
at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1526)
at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1510)
at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1467)
at org.apache.poi.ss.formula.FormulaParser.Arguments(FormulaParser.java:1051)
at org.apache.poi.ss.formula.FormulaParser.function(FormulaParser.java:936)
at org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:558)
at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:429)
at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:268)
at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1119)
at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1079)
at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1066)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1426)
at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1526)
at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1510)
at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1467)
at org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1447)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:1568)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:176)
at org.apache.poi.hssf.model.HSSFFormulaParser.parse(HSSFFormulaParser.java:72)
at org.apache.poi.hssf.usermodel.HSSFCell.setCellFormula(HSSFCell.java:594)`

最佳答案

我不确定你是如何使用这个公式的。但是,如果您的问题是关于基于行和列的动态单元格引用,也许我可以帮助您。

对于任何单元格,在运行时说“B5”,

cell.getReference(); 

将为您提供单元格引用(例如示例...它将返回您“B5”

cell.getReference().toString().charAt(0); 

将为您提供列引用(如果当前单元格为 B5,将为您提供“B”)。现在

cell.getRowIndex(); 

或者

 cell.getReference().toString().charAt(1);

将为您提供行索引。我已多次使用它来更新/创建工作簿上的命名范围和公式。

小改动包括处理地址,例如 AZ89

对于 AZ99 的情况,我们可以使用以下小技巧:

String str = cell.getReference();
for(index = 0;index<str.length();index++){
if((int)str.charAt(index)<65){
break;
}
}
String Col = str.substring(0, index);
String Row = str.substring(index+1, str.length());

关于java - 需要有关 apache poi api 中的数组公式实现的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17422881/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com