使用没有样式/格式的apache poi修改现有的xlsx表会丢失

时间:2018-01-26 08:11:47

标签: java excel apache-poi

我需要将数据写入现有模板并在其中存储格式,但样式(字体,颜色,边框)会消失。 我做了什么? 加载表并获取其中的表格:

Workbook xlsxWorkbook = WorkbookFactory.create(new File(filename));
xlsxWorkbook.getSheet(sheetname);

像这样修改:

while (condition) {
    Row dataRow = xlsxSheet.getRow(rowIndex);
    if (dataRow == null) {
        dataRow = xlsxSheet.createRow(rowIndex);
    }
    rowIndex++;
    int colIndex = 0;

    for (String colName : colNames) {
        Cell tmp = dataRow.getCell(colIndex);
        if (tmp == null)
            tmp = dataRow.createCell(colIndex);

        tmp.setCellValue(value);

        colIndex++;
    }
}

回写文件:

write(params.getProperty("xlsx-filename"), xlsxSheet.getWorkbook());

我对此了解多少? 之前我使用相同而没有空检查,在这种情况下所有样式都会消失。 现在,如果单元格和行不为空(不在java代码中重新创建),则格式化保存,但预先初始化的情况非常不同。有时候数据会初始化它,有时候不会,有时会预先初始化具有特定风格的单元格。

P.S。抱歉我的英文

1 个答案:

答案 0 :(得分:1)

据我所知,无论是添加新行还是修改现有行,您都希望保护单元格样式。为了实现它们,您可以获取每个单元格或完整行的样式并设置新的或修改过的行。

Row dataRow = xlsxSheet.getRow(rowIndex);
CellStyle  currentRowStyle = dataRow .getRowStyle()
Cell tmp = dataRow.getCell(colIndex);
CellStyle currentStyle = tmp.getCellStyle();

如果要添加新行,可以使用此行获取最后一个行号,而不是检查null值:

int rowCount = sheet.getLastRowNum();