这个问题困扰了我好几天。这是有关它的详细说明。
我想使用SXSSFWorkbook生成一个较大的excel(.xlsx)文件,该文件的内存占用较少。
这是代码
`public static CellStyle createCellStyle2(String fontColor, String backgroundColor, short dataFormat, Workbook workbook, Map<String, CellStyle> xssfCellStyleMap) throws Exception {
SXSSFWorkbook sxssfWorkbook = (SXSSFWorkbook) workbook;
String md5 = DigestUtils.md5Hex(fontColor + backgroundColor + dataFormat);
CellStyle cellStyle = xssfCellStyleMap.get(md5);
if (ObjectUtil.isEmpty(cellStyle)) {
cellStyle = sxssfWorkbook.createCellStyle();
cellStyle.setDataFormat(dataFormat);
if (!ObjectUtil.isEmpty(backgroundColor)) {
XSSFColor XSSFBackgroundColor = getXSSFColor(backgroundColor);
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyle.setFillForegroundColor(XSSFBackgroundColor.getIndexed());
}
if (!ObjectUtil.isEmpty(fontColor)) {
XSSFColor XSSFFontColor = getXSSFColor4Font(fontColor);
org.apache.poi.ss.usermodel.Font rowXSSFFont = sxssfWorkbook.createFont();
rowXSSFFont.setColor(XSSFFontColor.getIndexed());
cellStyle.setFont(rowXSSFFont);
} else {
org.apache.poi.ss.usermodel.Font rowXSSFFont = sxssfWorkbook.createFont();
cellStyle.setFont(rowXSSFFont);
}
xssfCellStyleMap.put(md5, cellStyle);
}
return cellStyle;
}`
public static XSSFColor getXSSFColor(String hexaColor) throws Exception {
int r = Integer.parseInt((hexaColor.substring(0, 2)), 16);
int g = Integer.parseInt((hexaColor.substring(2, 4)), 16);
int b = Integer.parseInt((hexaColor.substring(4, 6)), 16);
java.awt.Color color = new Color(r, g, b);
return new XSSFColor(color);
}
下面是最终生成的文件
enter image description here
实际上,我要这样归档
enter image description here
如果您知道任何原因。请给我建议。非常感谢!