Java-通过POI给Word文档的表格增加行

本文介绍如何使用Java的POI库在Word文档中动态添加表格行,重点讲解了createRow()和addRow(XWPFTableRow row)两种方法,包括各自的适用场景和注意事项,提供正确与错误的使用示例。
摘要由CSDN通过智能技术生成

问题描述:需要通过程序动态的给word文档中的表格添加内容

POI版本:3-4适用

解决方法:
POI提供了四种方法添加行:

  1. 调用createRow() 方法创建行,无样式
  2. 调用addRow(XWPFTableRow row) 方法创建,有样式
  3. 调用addNewRowBetween()方法,不生效,官方文档显示已弃用在这里插入图片描述
  4. 调用insertNewTableRow() 方法创建行,无样式,并且还需要调用addNewCol() 来添加一列数据,列数必须统一,否则生成的Word无法打开,不推荐。

下面来详细说说前两种方法:

第一种方式,createRow()创建无样式行。如果想添加样式,可以通过手动设置表边框实现

注意:这种方法存在一定局限性,当word文档中存在多个表,会同时设置其他表的边框。
代码如下:

// 给表添加边框
     CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();
     CTBorder hBorder = borders.addNewInsideH();
     hBorder.setVal(STBorder.Enum.forString("single"));
     hBorder.setSz(new BigInteger("1"));
     hBorder.setColor("000000");

     CTBorder vBorder = borders.addNewInsideV
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
部分代码.................. . .. .. /** * 处理动态表格 * 默认取第二一列的标识 * @param table * @param ctRow * @param values 需要添数据 */ public static void processDynamicTable(XWPFTable table, CTRow ctRow, List values) { if(values==null || values.size()==0) return; for (Iterator iterator = values.iterator(); iterator.hasNext();) { String[] value = iterator.next(); XWPFTableRow newRow = new XWPFTableRow(ctRow,table); List cells = newRow.getTableCells(); if(cells==null || cells.size()==0) return; for (int j = 0; j < cells.size(); j++) { XWPFTableCell cell = cells.get(j); cell.removeParagraph(0); if(j<=value.length) cell.setText(value[j]); } table.addRow(newRow); } } /** * 处理表格 * @param doc * @param dataMap */ public static void processTable(XWPFDocument doc, Map dataMap) { Iterator iter = doc.getTablesIterator(); while(iter.hasNext()) { XWPFTable table = iter.next(); List rows = table.getRows(); if(rows==null || rows.size()==0) continue; CTRow ctRow = null; for (int i = 0; i < rows.size(); i++) { XWPFTableRow row = rows.get(i); ctRow = (CTRow)row.getCtRow().copy(); List cells = row.getTableCells(); if(cells==null || cells.size()==0) continue; //处理标致 boolean sign = false; for (int j = 0; j < cells.size(); j++) { XWPFTableCell cell = cells.get(j); if(cell.getText()==null) continue; if(i==1 && j==0) { //取第二一列的值,再添table.关键字之后与dataMap匹配,有则当动态表格处理 String key = "table."+ cell.getText(); if(dataMap.containsKey(key)) { List values = (List)dataMap.get(key); table.removeRow(1); processDynamicTable(table, ctRow, values); //更新处理标致 sign = true; break; } } if(!cell.getText().startsWith("\\$") && cell.getText().endsWith("\\$")) continue; String key = cell.getText().replaceAll("\\$", ""); if(dataMap.containsKey(key)) {
您可以使用Apache POI库来给Word文档中的表格设置样式。下面是一个简单的示例代码,演示如何设置表格样式: ```java import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.ss.usermodel.*; public class SetTableStyle { public static void main(String[] args) { // 创建新的Word文档 XWPFDocument document = new XWPFDocument(); // 创建一个新的表格 XWPFTable table = document.createTable(3, 3); // 设置表格样式 CTTblPr tblPr = table.getCTTbl().getTblPr(); CTTblBorders borders = tblPr.addNewTblBorders(); CTBorder border = borders.addNewInsideH(); border.setVal(STBorder.SINGLE); border.setSz(new BigInteger("2")); border.setColor("000000"); // 设置表格内容 for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { XWPFTableCell cell = table.getRow(row).getCell(col); cell.setText("Row " + (row+1) + ", Col " + (col+1)); } } // 保存文档 try { FileOutputStream out = new FileOutputStream("table.docx"); document.write(out); out.close(); System.out.println("表格样式设置成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码创建了一个新的Word文档,并在其中创建了一个3x3的表格。通过调整`CTBorder`对象的属性,可以设置表格边框的样式、粗细和颜色。保存文档后,您会在当前目录下找到名为`table.docx`的Word文档,其中包含了设置好样式的表格。 请注意,上述代码仅演示了如何设置表格的边框样式,您可以根据需求进一步调整其他表格样式,比如背景颜色、字体样式等。详细的API文档可以参考Apache POI的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值