17

我正在使用 Apache POI 将数据导出到 .xlsx 文件,并且我想设置文件中包含的一些行和单元格的样式。

我正在使用 XSSF,因为该文件将在 Excel 2007+ 中读取。

基本上,我的问题是我正在尝试设置如下示例中的行样式,它将索引 0 处的整行设置为黑色前景色。它工作正常,但是每当我创建一个新单元格时,新创建的单元格没有样式,就好像它覆盖了我指定的行样式。

这是一个代码片段来演示我在做什么:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("mySheet");
XSSFRow row = sheet.createRow(0);

XSSFCellStyle myStyle = wb.createCellStyle();           

myStyle.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255)));
myStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

row.setRowStyle(myStyle); //This works, the whole row is now black

row.createCell(0); // This cell doesn't have a style, the rest of the line stays stylized
row.getCell(0).setCellValue("Test");

我也试过 *row.createCell(0, Cell.CELL_TYPE_STRING);*,但它没有改变任何东西。

完成我想做的事情的正确方法是什么?我想这样做,所以我不必在创建每个单元格后设置它的样式,因为同一行上的所有单元格都具有相同的样式。

4

3 回答 3

12

将样式设置到新创建的单元格中,例如如下:

    XSSFCell newCell = row.createCell(0);
    newCell.setCellStyle(myStyle);
于 2012-10-31T05:11:58.377 回答
10

即使您创建具有样式的行,它也不会影响其创建的单元格。创建单元格有自己的单元格样式。row style不会cell style自动覆盖。如果您想在单元格中使用行样式,则必须重新设置。

即使你设置row style在最后,它也不会影响到单元格。

例子

CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("new sheet");
Row r = sheet.createRow(0);
r.setRowStyle(rowStyle);

Cell c1 = r.createCell(0);
c1.setCellValue("Test 1");
c1.setCellStyle(rowStyle);
于 2012-10-31T05:33:37.513 回答
2

我同意“setRowStyle”不能正常工作。

我创建了自己的函数来将样式应用于范围(可以是一行或多行)

public void applyStyleToRange(Sheet sheet, CellStyle style, int rowStart, int colStart, int rowEnd, int colEnd) {
    for (int r = rowStart; r <= rowEnd; r++) {
        for (int c = colStart; c <= colEnd; c++) {
            Row row = sheet.getRow(r);

            if (row != null) {
                Cell cell = row.getCell(c);

                if (cell != null) {
                    cell.setCellStyle(style);
                }
            }
        }
    }
}
于 2017-10-26T14:37:04.867 回答