我在ApachePOI(v4.1.2)中遇到了一个问题,它不能将边界设置得很细。xls和xlsx扩展都支持我的代码。当我将数据导出到xlsx文件时,一切正常,但是对于xls文件,它不会绘制从单元格k5到末尾的边界。
这是我的密码:
private int populateExcelData(Workbook workbook, Sheet sheet, int rowNum, List<List<Object>> excelData,
ExcelVo excelVo, Boolean isHeader) {
if (CollectionUtils.isNotEmpty(excelData)) {
int cellNum = 0;
Row row;
for (List<Object> objects : excelData) {
cellNum = excelVo.getColPadding();
row = sheet.createRow(rowNum++);
Cell cell;
for (Object object : objects) {
cell = row.createCell(cellNum++);
setCellValue(cell, object, excelVo);
configCellStyle(cell, workbook, excelVo, isHeader);
}
}
}
return rowNum;
}
private void configCellStyle(Cell cell, Workbook workbook, ExcelVo excelVo, Boolean isHeader) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
if (isHeader) {
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerFont.setColor(excelVo.getFontColor().getIndex());
cellStyle.setFont(headerFont);
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setFillForegroundColor(excelVo.getBackgroundColor().getIndex());
}
cell.setCellStyle(cellStyle);
}
我不知道为什么用xls文件它只画从单元格k5开始的边界。代码不会抛出bug或异常。
谢谢大家的支持。
1条答案
按热度按时间c6ubokkw1#
excel对独特的单元格格式/单元格样式以及字体都有限制。单元格样式和字体存储在工作簿级别。所有工作表中的所有单元格都将共享它们。当前excel版本限制为:
独特的单元格格式/单元格样式:65490
和
独特的字体类型:1024种全局字体可供使用;每个工作簿512个
以前版本的excel(二进制*.xls)甚至有更小的限制。
因此,如果您为每个单元格创建一个单独的单元格样式,您将很快达到极限。
XSSF
可能会工作,因为限制更大。但是以前版本的excel(二进制*.xls)有更小的限制。这就是为什么不使用HSSF
.所以要做的是,在工作簿级别上为工作簿创建尽可能多的单元格样式。在细胞填充过程之外进行。在创建单元本身时,单元样式只能使用
cell.setCellStyle
. 但它不能被创造。让我们用一个完整的例子来说明这一点。它部分使用了你的代码
populateExcelData
但我只能希望它符合你的想法,因为你没有提供一个完整的例子。