Java 带有SUMPRODUCT和XSSFFormulaEvaluator的Apache POI autoSizeColumn不工作
我正在使用ApachePOI4.1.1和Java8。我创建了XSSFWorkbook,其中包含带有SUMPRODUCT的单元格公式和单元格范围。在保存文件之前,我执行以下操作: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
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\”)
torow.createCell(3).setCellFormula(“SUMPRODUCT(A1:A1,--(B1:B1=\'a\”))代码>则宽度正确
我遗漏了什么?遗漏的不是你,而是apache poi
。apache poi
的公式计算器无法正确计算数组公式。因此它将SUMPRODUCT(A1:A3,-(B1:B3=“a”)
计算为一个错误值。因此,在此之后,单元格不包含自动调整大小过程可以获得正确单元格宽度的内容。