XSSF Apache POI

4
我在XSSF工作表中使用下面的代码来设置默认列样式,但是它没有生效,有人能提供修复方法吗?
format = workbook.createDataFormat();
style = workbook.createCellStyle();
style.setDataFormat(format.getFormat("@"));
sheet.setDefaultColumnStyle(1, style); 
3个回答

2

从POI 4.1.0版本开始,它可以与SXSSF一起使用,但有一个注意点。

默认列样式仅定义当用户在由POI创建的工作表中输入数据到空单元格时将应用哪种样式。

如果您通过POI创建单元格并输入数据,则不会应用默认格式,您必须使用setCellStyle(CellStyle)

例如,对于文本样式:

private CellStyle createTextFormat(SXSSFWorkbook workbook) {
    DataFormat fmt = workbook.createDataFormat();
    CellStyle textStyle = workbook.createCellStyle();
    textStyle.setDataFormat(fmt.getFormat("@"));
    return textStyle;
}

// then do both:
int columnIndex = 0;
sheet.setDefaultColumnStyle(columnIndex, textFormat)

SXSSFCell cell = row.createCell(0);
cell.setCellStyle(textFormat);
cell.setCellValue("0100");

1

可能这个错误让你很头疼。我使用Apache POI 3.7尝试了你的代码,发现第二列被隐藏(宽度为0),并且格式未应用。

祝好, Wim

PS请注意,我谈论的是第二列,这才是你的代码真正涉及到的内容;如果你想将样式应用于第一列,你应该使用0(从零开始)。


我使用poi-3.9-20121203.jar和SXSSFWorkbook流式实例。使用sheet.setDefaultColumnStyle函数仍然无效。所有列都在Excel中保持隐藏,没有应用样式。解决方法是使用cell.setCellStyle()函数。它猜测为每个单元格引用在.xlsx xml中复制(?)样式数据,使文件比应该更大。不确定。使用HSSFDataFormat.getBuiltinFormat() getter也没有帮助。默认的columnstyle setter可能适用于旧的非流式HSSFworkbook对象。 - Whome

0

试试这个,它会起作用的:

       style.setDataFormat(HSSFDataFormat.getBuiltinFormat("@"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接