【问题标题】:Modifying existing xlsx table using apache poi without style/format lose使用 apache poi 修改现有 xlsx 表而不会丢失样式/格式
【发布时间】:2018-01-26 16:47:35
【问题描述】:

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

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 代码中重新创建),格式保存,但它们预初始化的情况非常不同。有时数据会初始化它,有时不会,有时会预先初始化具有特定样式的单元格。

附言对不起我的英语

【问题讨论】:

  • rowIndex 的值是多少。该代码在哪里定义?您想添加行现有工作表或更改行吗?
  • 行索引只是行迭代器,之前定义了一行“int rowIndex = 0;”。我想在清晰的模板上写数据
  • 想在清晰的模板上写入数据,还想修改?那么风格在哪里?抱歉,我很困惑,根据您发布的代码,您想达到什么目的?
  • 模板仅包含样式(ex 全部为黄色),模板仅用于将在结果样式数据中的样式
  • 如果单元格样式是使用Excel 设置的,那么这可以是一个现有单元格的样式,也可以是该行中所有单元格的行样式,或者该列中所有单元格的列样式。在stackoverflow.com/questions/42081288/… 中,我提供了一种方法来获取工作表中单元格的首选样式。这将获取给定单元格的当前样式或行样式或列样式。

标签: java excel apache-poi


【解决方案1】:

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

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

如果你想添加新行,你可以用这个来获取最后一个行号,而不是检查null值:

int rowCount = sheet.getLastRowNum();

【讨论】:

  • 在实际代码中,我还检查了是否触发了 null 检查及其在模板上的触发,因此 getRowStyle() 和 getCellStyle() 只会抛出 NPE。数据也是未知大小的 sql 表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多