当前位置: 首页 > 知识库问答 >
问题:

使用apache poi修改现有xlsx表而不丢失样式/格式

赵华彩
2023-03-14

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

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());

我对这件事的了解?前面我使用same而不使用null检查,在这种情况下,所有样式都将消失。现在,如果cell和row不是null(不是在java代码中重新创建的),格式保存,但是它们预先初始化时的情况是非常不同的。有时数据初始化它,有时不初始化,有时具有特定建立的样式的单元格是预先初始化的。

附注。对不起我的英语

共有1个答案

徐飞龙
2023-03-14

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

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

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

int rowCount = sheet.getLastRowNum();
 类似资料:
  • 所以我在复制时排除了“表格单元格结束标记(看起来像太阳)”。然后它将只粘贴文本(没有表格,因为我不希望它这样做),但最后一段失去了样式。 如果我在表格单元格末尾添加一个额外的段落标记(按Enter)并复制没有“表格单元格结束标记”的单元格,它就像我不想做的一样工作...几乎。目标文档没有表(是!)而且所有段落都有正确的样式(是的!),但最后也有一个不必要的额外段落标记。当然还有表格单元格中多余的空

  • 问题内容: 我有一个.xlsx文件要编辑,我发现openpyxl可以操纵Excel 2007文件。我只想更改某些单元格中的值,并保持其他设置不变。 但是在阅读了文档之后,我找不到用于编辑现有文件的示例。它仅演示了读取.xlsx文件并写入新文件。 我尝试通过以下方式编辑现有文件,但保存后,文件中的样式已删除(如字体,颜色): 问题答案: 现在,openpyxl无法处理足够好的样式,因此我尝试使用py

  • 因此,使用Apache POI的Excel中出现不可读内容错误的主题似乎很常见。然而,我感到惊讶的是,我仍然找不到我的问题的例子,特别是因为我试图做的事情似乎非常简单。这让我相信,随着我对一些java对象,特别是File和FileInputStream的理解,我的脑海中可能会浮现出一些东西。我通过大量的尝试和错误发现了如何使其工作,但我的问题是为什么一个工作,为什么另一个不工作,我很想了解根本问题

  • 我想分别使用python将多个excel文件与多个工作表合并。我不想丢失工作表中的任何格式。它应该复制所有工作表,只创建一个excel文件。 我只能合并第一张,而且所有的格式都丢失了。 这是我的代码:

  • 问题内容: 是否可以使用JavaScript更改CSS样式表? 我 不是 在说: 我 AM 谈论改变: 除了做一些肮脏的事情(我们还没有尝试过)之外,比如在头部创建一个新对象,innerHTML在其中创建一个样式标签,等等。尽管这样做确实可行,但仍会带来一些样式问题块已经在其他地方定义了,我不确定何时/是否浏览器会解析动态创建的样式块? 问题答案: 浏览器支持已得到很大改进(支持所有浏览器,包括I

  • 到目前为止,我处理样式的经验是创建一个style.xml文件,并为样式创建我想要的属性。如果我希望我的样式基于现有的样式,我使用父属性。然后,我在要应用样式的控件上的布局文件中指定样式。 我无所适从的地方是当我想使用系统样式并且只更新某些属性时。我想知道我是否可以离开布局文件单独和不打扰应用任何样式到控件。相反,我会以某种方式更新系统样式的属性,这将更新我的应用程序中默认已经使用该样式的任何地方。