poi-tl 根据模板动态创建表格,并修改字体样式及行距

本文介绍了在poiTI1.12.1版本下,如何使用Java代码动态生成Word表单模板,包括数据集合的处理、表单结构、表格样式以及异常处理。重点展示了核心表单生成和单元格样式的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

poi TI版本为: 1.12.1

word表单模板,

在这里插入图片描述

核心生成表单代码
		//定义数据集合
        Map<String, Object> datas = new HashMap<>();
        int deptNumber = 0;
        for (String dept : Lists.newArrayList()) {
        	//标题解析
            datas.put(String.format("title%s_%s"), String.format("%s%s年第%s次周例会汇报材料-%s","工作计划"));
            //设置表单只有4个单元格,并设置单元格的大小
            Tables.TableBuilder tableBuilder = Tables.ofA4ExtendWidth().percentWidth("100%", new int[]{7, 10, 10, 73});
            //添加每行数据,.具体逻辑根据循环定义,内容省去
            RowRenderData rowRenderData = Rows.of(fdOrder, cellGzdl, rwly, cellRenderData).center().rowHeight(2.54f).create();
            //把内行添加到table 中去
            tableBuilder.addRow(rowRenderData);

            // 表单核心数据
            datas.put(String.format("table%s_%s"), tableBuilder.create());
        }
        Configure config = Configure.builder().build();
        try {
        //根据模板,输出流提供前端使用
            XWPFTemplate.compile(PropertiesUtils.getPath() + "template.docx", config).render(datas).writeAndClose(response.getOutputStream());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
//设置表格 内容,
private static Map<String, RowRenderData> getRowRenderData() {
        Map<String, RowRenderData> title = new HashMap<>();
        //标题完成情况 每个单元格内容
        CellRenderData cell1 = getHearderCellRenderData("序号");
        CellRenderData cell2 = getHearderCellRenderData("大类");
        CellRenderData cell3 = getHearderCellRenderData("来源");
        CellRenderData cell4 = getHearderCellRenderData("情况");
        //表格一行数据
        RowRenderData row0 = Rows.of(cell1, cell2, cell3, cell4).center().rowHeight(2.5f).create();
        return title;
    }
表格样式
/**
     * 设置表格的样式
     */
    private static CellRenderData getCellRenderData(String text) {
        return Cells.of().addParagraph(getParagraphRenderData(text)).create();
    }
    /**
     * 表头样式
     *
     * @param text
     * @return
     */
    private static CellRenderData getHearderCellRenderData(String text) {
        return Cells.of().addParagraph(getParagraphRenderData(text, true)).create();
    }

    private static ParagraphRenderData getParagraphRenderData(String text) {
        return getParagraphRenderData(text, false);
    }

    private static ParagraphRenderData getParagraphRenderData(String text, boolean title) {
        //设置表格字体大小
        Style style = Style.builder().buildFontSize(14).build();
         //设置表格行距
        ParagraphStyle build = ParagraphStyle
                .builder()
                .withSpacingRule(LineSpacingRule.EXACT)
                .withSpacing(18).build();
        if (title) {
            style.setBold(true);
            return Paragraphs.of(Texts.of(text).style(style).create()).paraStyle(build).center().create();
        }
        return Paragraphs.of(Texts.of(text).style(style).create()).paraStyle(build).left().create();
    }
Java中,使用Apache POI工具包(特别是POI-TL,它是POI的一个简化版本)处理Microsoft Word文档是很常见的。如果你需要向Word模板中插入表格单元格,可以按照以下步骤操作: 1. 首先,确保你已经在项目中添加了 poipoi-ooxml-tl 的依赖。你可以通过Maven或Gradle来管理。 ```xml <!-- Maven --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency> <!-- Gradle (如果使用的是最新版本) --> implementation 'org.apache.poi:poi-ooxml:5.0.0' ``` 2. 创建一个新的`XWPFDocument`对象,这个是Word文档的表示形式。 ```java import org.apache.poi.xwpf.usermodel.*; XWPFDocument document = new XWPFDocument(); ``` 3. 添加表格到文档。创建一个`XWPFTable`对象,设置其列数和行数。 ```java XWPFParagraph paragraph = document.createParagraph(); XWPFTable table = paragraph.createTable(2, 3); // 2列3行 ``` 4. 合单元格。获取表格外的一个`XWPFTableCell`,然后使用`mergeCells()`方法来指定要合的范围。 ```java XWPFTableRow row = table.getRow(0); row.getCell(0).mergeWith(row.getCell(1)); // 合第1列和第2列的第一个单元格 row.getCell(0).mergeWith(row.getCell(2)); // 如果需要,也可以合更多相邻单元格 ``` 5. 将数据填充到表格。遍历表格设置单元格的内容。 ```java for (int i = 0; i < table.getRows().size(); i++) { for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) { XWPFTableCell cell = table.getRow(i).getCell(j); cell.setText("这是单元格 " + (i+1) + "," + (j+1)); // 设置单元格内容 } } ``` 6. 最后,保存文档。 ```java try (OutputStream out = new FileOutputStream("output.docx")) { document.write(out); } catch (IOException e) { e.printStackTrace(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值