Java 带有SUMPRODUCT和XSSFFormulaEvaluator的Apache POI autoSizeColumn不工作

Java 带有SUMPRODUCT和XSSFFormulaEvaluator的Apache POI autoSizeColumn不工作,java,excel,apache-poi,xssf,Java,Excel,Apache Poi,Xssf,我正在使用ApachePOI4.1.1和Java8。我创建了XSSFWorkbook,其中包含带有SUMPRODUCT的单元格公式和单元格范围。在保存文件之前,我执行以下操作: XSSFFormulaEvaluator.evaluateAllFormulaCells(wb)和表。自动调整大小列(3,真)但第3列的宽度不正确。 下面是示例代码: import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf

我正在使用ApachePOI4.1.1和Java8。我创建了XSSFWorkbook,其中包含带有SUMPRODUCT的单元格公式和单元格范围。在保存文件之前,我执行以下操作:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb)
表。自动调整大小列(3,真)但第3列的宽度不正确。
下面是示例代码:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;

import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MyClass {
    public static void main(String args[]) throws FileNotFoundException, IOException {
        XSSFWorkbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet();
        Row row = sheet.createRow(0);
        row.createCell(0).setCellValue(800);
        row.createCell(1).setCellValue("a");
        row = sheet.createRow(1);
        row.createCell(0).setCellValue(900);
        row.createCell(1).setCellValue("a");
        row = sheet.createRow(2);
        row.createCell(0).setCellValue(1000);
        row.createCell(1).setCellValue("b");
        
        row = sheet.createRow(3);
        row.createCell(3).setCellValue("a");
        row = sheet.createRow(4);
        row.createCell(3).setCellFormula("SUMPRODUCT(A1:A3,--(B1:B3=\"a\"))");
    
        XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
        sheet.autoSizeColumn(3, true);
    
        FileOutputStream out = new FileOutputStream("/myfiles/example.xlsx");
        wb.write(out);
        wb.close();
        out.close();
    }
}
以下是JDoodle中的相同代码:

如果我更改行
row.createCell(3).setCellFormula(“SUMPRODUCT(A1:A3,--(B1:B3=\'a\”)
to
row.createCell(3).setCellFormula(“SUMPRODUCT(A1:A1,--(B1:B1=\'a\”))则宽度正确


我遗漏了什么?

遗漏的不是你,而是apache poi
apache poi
的公式计算器无法正确计算数组公式。因此它将SUMPRODUCT(A1:A3,-(B1:B3=“a”)
计算为一个错误值。因此,在此之后,单元格不包含自动调整大小过程可以获得正确单元格宽度的内容。