NPOI Word:如何克隆行并插入到指定索引位置?
解决NPOI克隆Word表格行并插入指定位置的问题
正确实现步骤
要克隆数据行并插入到指定位置,需要同时操作底层XML结构和NPOI的对象集合——因为XWPFTable的Rows是缓存集合,仅操作它不会同步到Word文档的底层XML。具体代码如下:
// 假设table是目标XWPFTable对象 XWPFTableRow dataRow = table.Rows[1]; // 第2行(数据占位行,索引从0开始) int insertIndex = 2; // 插入到数据行之后、汇总行之前的位置 // 1. 复制底层的CT_Row对象(包含行的格式和内容) CT_Row clonedCtRow = (CT_Row)dataRow.GetCTRow().Copy(); // 2. 将克隆的CT_Row插入到表格的底层XML结构中 CT_Table ctTable = table.GetCTTbl(); ctTable.tr.Insert(insertIndex, clonedCtRow); // 3. 同步XWPFTable的Rows缓存集合 XWPFTableRow newRow = new XWPFTableRow(clonedCtRow, table); table.Rows.Insert(insertIndex, newRow);
为什么之前的尝试失败
CloneRow():该方法内部默认调用table.AddRow(newRow),会把新行添加到表格末尾,而非指定位置。- 仅调用
table.Rows.Insert():只更新了NPOI的缓存集合,没有修改Word文档的底层XML结构,导致新行在文档中不显示。 InsertNewTableRow():此方法会创建空行,不会复制原数据行的格式和内容,因此破坏表格结构。Copy():该方法属于浅拷贝,未正确关联表格对象和底层XML,所以无效果。
内容的提问来源于stack exchange,提问作者elshev
相关产品推荐
相关产品推荐

