java - Apache POI 公式中的引用表

标签 java excel excel-2003 formula apache-poi

我正在使用 Apache POI 3.6 生成 excel (2003) 表格。我想在一个单元格中插入一个公式,计算多个工作表上特定单元格的总和。

我有名为 a、b 和 c 的工作表,我想计算单元格 A1 的总和

我试过:

cell.setCellFormula("a!A1+b!A1+c!A1");

POI 不会产生任何错误,但是当我打开工作表时,我在 OpenOffice 中遇到错误:

Err: 522 - =$#REF!.A1+$#REF!.A1+$#REF!.A1

我做了一些研究,显然在引用多个工作表时存在错误。 (例如 https://issues.apache.org/bugzilla/show_bug.cgi?id=46670)有谁知道如何在 POI 中使用使用多个工作表的公式?

------------源代码--------------------

public static void main(String args[]){
    Workbook wb = new HSSFWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();
    Sheet sheet = wb.createSheet("Total");

    Row row = sheet.createRow((short)0);
    Cell cell = row.createCell(0);

    cell.setCellFormula("a!A1+b!A1+c!A1");

    Sheet sheet1 = wb.createSheet("a");
    Sheet sheet2 = wb.createSheet("b");
    Sheet sheet3 = wb.createSheet("c");
    Sheet sheet4 = wb.createSheet("d");

    createVal(sheet1, createHelper, 5);
    createVal(sheet2, createHelper, 10);
    createVal(sheet3, createHelper, 15);
    createVal(sheet4, createHelper, 20);

    try {
        FileOutputStream fileOut = new FileOutputStream("workbook.xls");
        wb.write(fileOut);
        fileOut.close();
        System.out.println("done");
    } catch (IOException e) {
        e.printStackTrace();
    }   }

public static void createVal(Sheet sheet, CreationHelper createHelper, int i){
     Row row = sheet.createRow((short)0);
        // Create a cell and put a value in it.
        Cell cell = row.createCell(0);
        // Or do it on one line.
        row.createCell(0).setCellValue(i);

}

最佳答案

如果您将“总计”工作表的创建移动到之后填充各个工作表,您的代码将正常工作。

如下所示:

...    
    createVal(sheet1, createHelper, 5); 
    createVal(sheet2, createHelper, 10); 
    createVal(sheet3, createHelper, 15);
    createVal(sheet4, createHelper, 20); 

    Sheet sheet = wb.createSheet("Total"); 
    Row row = sheet.createRow((short)0); 
    Cell cell = row.createCell(0); 

    cell.setCellFormula("a!A1+b!A1+c!A1"); 

单元格 Total!A1 显示 30

关于java - Apache POI 公式中的引用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083420/

相关文章:

excel - 如何解决错误代码: '404' ,消息: 'The requested resource doesn' t exist when adding a row to an excel file using azure logic apps?

Excel货币快捷方式产生€符号

vba - Excel 2003 : Programmatic sort of sheet in different workbook

java - 总结 Java 中二维整数数组中的外部元素?

java - 如何使用 ActiveMQ Blob 消息?

Excel-VBA - 如果喜欢*值*,则为 X 轴点着色

excel - 有没有办法响应Excel条件格式的变化?

java - 特定binarySearch的实现

java - Java 8 三元条件和未装箱原语的方法重载歧义

vba - 允许在一个打开的工作簿中使用 UDF,但使其在另一工作簿中不可见/不可用/不可访问