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

标签 java apache-poi excel-formula

我获得了现有项目的分配更新。以前的开发人员使用 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/

相关文章:

apache-poi - 在禁用显示注释的情况下在 apache poi(对于 .xlsx 文件)中创建单元格注释

java - 在 Java 10 中使用 Apache Poi 4 时出现错误

excel - 多重匹配多重返回excel公式

Java Swing : implementing my Comboboxmodel for JComboBox

java - 泛型阶乘,如何实现

java - 线程 "main"java.lang.Error : Unresolved compilation 中出现异常

excel - 将 INDEX/MATCH 与多个条件和多个匹配连接起来

java - 如何在java中删除空格后的字符串

java - 将文件夹恢复到包中

excel - 在某一点之后查找文本的最佳方法是什么