You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache POI中为XSLFTable添加新行并保留单元格样式

解决Apache POI给PPT表格添加带样式新行的问题

问题原因

XSLFTableRow的构造方法是包私有,无法直接通过new XSLFTableRow(ctrow, table)实例化,这和XSSFTable的实现机制不同。

可行解决方案

通过复制旧行的底层CTRow对象,添加到表格的CTTable结构中,再获取对应的XSLFTableRow来修改内容,新行会完全继承旧行的样式。

代码示例

// 获取目标表格(替换成你实际的表格对象)
XSLFTable table = ...;
// 获取表格最后一行(要继承样式的行)
XSLFTableRow oldRow = table.getRows().get(table.getRows().size() - 1);

// 复制旧行的底层CTRow对象
CTRow oldCTRow = (CTRow) oldRow.getXmlObject().copy();

// 清空复制行的单元格内容(避免继承旧内容)
for (CTTableCell cell : oldCTRow.getTcList()) {
    if (cell.isSetTxBody()) {
        cell.getTxBody().getPList().clear();
    }
}

// 将复制的行添加到表格的底层CTTable中
table.getCTTable().getTrList().add(oldCTRow);

// 获取刚添加的新行
XSLFTableRow newRow = table.getRows().get(table.getRows().size() - 1);

// 给新行的单元格设置内容(以第一个单元格为例)
XSLFTableCell targetCell = newRow.getCells().get(0);
targetCell.clearText(); // 双重保险清空内容
XSLFTextParagraph paragraph = targetCell.addNewTextParagraph();
XSLFTextRun textRun = paragraph.addNewTextRun();
textRun.setText("User 2");

说明

  • 复制CTRow会完整保留旧行的所有样式(如单元格宽度、背景色、字体格式等)
  • 先清空CT层的文本内容,再通过XSLF API添加新内容,避免残留旧数据
  • 如果需要修改多个单元格,遍历新行的getCells()列表逐个设置即可

内容的提问来源于stack exchange,提问作者Adrian Duran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:17:11