我试图制作我已经编写的代码,用于兼容xls和xlsx的XSSF工作簿。下面以一段代码为例。
Workbook workbook = WorkbookFactory.create(new File("F:\\JavaEE\\test.xls"));
Sheet sheet = workbook.getSheetAt(0);
short cellBorderColour = IndexedColors.GREY_80_PERCENT.getIndex();
Font font = workbook.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setColor(IndexedColors.BLUE_GREY.index);
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
cellStyle.setFont(font);
cellStyle.setBorderLeft(CellStyle.BORDER_HAIR);
cellStyle.setLeftBorderColor(cellBorderColour);
cellStyle.setBorderTop(CellStyle.BORDER_HAIR);
cellStyle.setTopBorderColor(cellBorderColour);
cellStyle.setBorderRight(CellStyle.BORDER_HAIR);
cellStyle.setRightBorderColor(cellBorderColour);
cellStyle.setBorderBottom(CellStyle.BORDER_MEDIUM);
cellStyle.setBottomBorderColor(cellBorderColour);
Row row = sheet.createRow(1);
Cell cell = row.createCell(1);
sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 4));
borderRowCells(1, 4, row, cell, cellStyle);
cell.setCellValue("Value");
FileOutputStream fos = new FileOutputStream("F:\\JavaEE\\new_test.xls");
workbook.write(fos);
//Take care of exception handling and closing of the stream.
上述代码用于跨越合并单元格的实用程序方法。
private void borderRowCells(int from, int to, Row row, Cell cell, CellStyle cellStyle) {
for (int i = from; i <= to; ++i) {
cell = row.createCell(i);
cell.setCellStyle(cellStyle);
}
}
此代码旨在将某些边框与某些合并单元格中的其他样式结合使用。
然而,合并单元格的边框未正确应用,如下图所示。
预计从B2
到E2
开始应用边框。但是,实际的边框区域仅涵盖C2
到E2
单元格值Value
也不是在单元格样式中指定的对齐中心。
如何在合并的单元格中正确应用此边框以及中心对齐?
IndexedColors.COLOR_NAME.getIndex()
提供的颜色列表也非常有限。该列表不太可能满足不同单元格中颜色的实际需求。
我们可以像使用XSSFColor
的xssf模型一样在ss模型中使用RGB颜色,如下所示吗?
XSSFColor commonColor = new XSSFColor(new java.awt.Color(240, 240, 240));
甚至更好/不同的东西?
PS:我正在使用Apache POI 3.10.1。