使用Apache POI中ss模型提供的单元格样式

时间:2014-10-10 19:24:11

标签: java excel apache-poi excel-2007 excel-2003

我试图制作我已经编写的代码,用于兼容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);
    }
}

此代码旨在将某些边框与某些合并单元格中的其他样式结合使用。

然而,合并单元格的边框未正确应用,如下图所示。

enter image description here

预计从B2E2开始应用边框。但是,实际的边框区域仅涵盖C2E2

单元格值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。

0 个答案:

没有答案