apache poi 修改docx表格_java Apache POI Word现有表插入单元格样式和格式的行

以下代码获取文档中第一个表中第二行的确切副本。然后它更改此行中单元格的文本内容。然后在此表的第2行和第3行之间插入此复制的行。

的改变必须table.addRow之前完成,因为该行必须在List tableRows插入它并将它添加到CTTbl ctTbl的TrArray之前完成的内容。后来的更改不会写入XML。我没有真正明白为什么会出现这种情况。

然后代码获取最后一行的副本,并将该副本添加到表的末尾。这里也要更改内容,必须在table.addRow之前完成。

import java.io.*;

import org.apache.poi.xwpf.usermodel.*;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;

public class WordInsertTableRow {

public static void main(String[] args) throws Exception {

XWPFDocument doc = new XWPFDocument(new FileInputStream("source.docx"));

XWPFTable table = doc.getTableArray(0);

//insert new row, which is a copy of row 2, as new row 3:

XWPFTableRow oldRow = table.getRow(1);

CTRow ctrow = CTRow.Factory.parse(oldRow.getCtRow().newInputStream());

XWPFTableRow newRow = new XWPFTableRow(ctrow, table);

int i = 1;

for (XWPFTableCell cell : newRow.getTableCells()) {

for (XWPFParagraph paragraph : cell.getParagraphs()) {

for (XWPFRun run : paragraph.getRuns()) {

run.setText("New row 3 cell " + i++, 0);

}

}

}

table.addRow(newRow, 2);

//insert new last row, which is a copy previous last row:

XWPFTableRow lastRow = table.getRows().get(table.getNumberOfRows() - 1);

ctrow = CTRow.Factory.parse(lastRow.getCtRow().newInputStream());

newRow = new XWPFTableRow(ctrow, table);

i = 1;

for (XWPFTableCell cell : newRow.getTableCells()) {

for (XWPFParagraph paragraph : cell.getParagraphs()) {

for (XWPFRun run : paragraph.getRuns()) {

run.setText("New last row cell " + i++, 0);

}

}

}

table.addRow(newRow);

doc.write(new FileOutputStream("result.docx"));

doc.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值