Проблема мучила меня несколько дней. Вот подробное описание.
Я хочу создать большой файл Excel (.xlsx) с помощью SXSSFWorkbook, который занимает меньше места в памяти.
Вот код
`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);
}
Ниже окончательно сгенерированный файл
введите описание изображения здесь
На самом деле, я хочу подать как это
введите описание изображения здесь
Если вам известна какая-либо причина по этому поводу. пожалуйста, дайте мне совет. Большое спасибо!