Spire.Doc for Java-根据表格模板生成word表格

官方地址:https://www.e-iceblue.cn/docjava/create-table-in-word-in-java.html

Java 创建 Word 表格官方案例:

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.TextRange;

import java.awt.*;

public class CreateTable {
    public static void main(String[] args) {
        //创建Word文档
        Document document = new Document();
        //添加一个section
        Section section = document.addSection();

        //数据
        String[] header = {"姓名", "性别", "部门", "工号"};
        String[][] data =
                {
                        new String[]{"Winny", "女", "综合", "0109"},
                        new String[]{"Lois", "女", "综合", "0111"},
                        new String[]{"Jois", "男", "技术", "0110"},
                        new String[]{"Moon", "女", "销售", "0112"},
                        new String[]{"Vinit", "女", "后勤", "0113"},
                };

        //添加表格
        Table table = section.addTable(true);
        //设置表格的行数和列数
        table.resetCells(data.length + 1, header.length);

        //设置第一行作为表格的表头并添加数据
        TableRow row = table.getRows().get(0);
        row.isHeader(true);
        row.setHeight(20);
        row.setHeightType(TableRowHeightType.Exactly);
        row.getRowFormat().setBackColor(Color.gray);
        for (int i = 0; i < header.length; i++) {
            row.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            Paragraph p = row.getCells().get(i).addParagraph();
            p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
            TextRange range1 = p.appendText(header[i]);
            range1.getCharacterFormat().setFontName("Arial");
            range1.getCharacterFormat().setFontSize(12f);
            range1.getCharacterFormat().setBold(true);
        }

        //添加数据到剩余行
        for (int r = 0; r < data.length; r++) {
            TableRow dataRow = table.getRows().get(r + 1);
            dataRow.setHeight(25);
            dataRow.setHeightType(TableRowHeightType.Exactly);
            dataRow.getRowFormat().setBackColor(Color.white);
            for (int c = 0; c < data[r].length; c++) {
                dataRow.getCells().get(c).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
                TextRange range2 = dataRow.getCells().get(c).addParagraph().appendText(data[r][c]);
                range2.getCharacterFormat().setFontName("Arial");
                range2.getCharacterFormat().setFontSize(10f);
            }
        }

        //设置单元格背景颜色
        for (int j = 1; j < table.getRows().getCount(); j++) {
            if (j % 2 == 0) {
                TableRow row2 = table.getRows().get(j);
                for (int f = 0; f < row2.getCells().getCount(); f++) {
                    row2.getCells().get(f).getCellFormat().setBackColor(new Color(173, 216, 230));
                }
            }
        }

        //保存文档
        document.saveToFile("CreateTable.docx", FileFormat.Docx_2013);
    }
}

在这里插入图片描述

现实中业务:根据数据(对象集合)生成表格
第一步:先封装好数据(这个根据各自实际场景封装)
第二步:看表头,如果表头比较简单,可以参考Java 合并、拆分 Word 表格中的单元格,对需要合并、拆分的单元格进行处理;如果表头比较复杂,也可以先将表头放在模板文件里
模板文件
需要注意的是,如果表头存在合并的情况,最好多出一行,防止将格式带到下面的内容里。

		//获取模板文件
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("template.docx");
        //创建Document类的对象
        Document document = new Document();
        //加载文件流
        document.loadFromStream(resourceAsStream, FileFormat.Docx);
        //获取表格
        Section section = document.getSections().get(NumConstant.ZERO);
        com.spire.doc.Table table = section.getTables().get(NumConstant.ZERO);
        //设置表格是否跨页断行
		//table.getTableFormat().isBreakAcrossPages(false);
        //添加数据到剩余行
        for (int r = NumConstant.ZERO; r < list.size(); r++) {
            ZgcsExcelBean zgcsExcelBean = list.get(r);
            //table.addRow(boolean isCopyFormat, int columnsNum)
            table.addRow(true, NumConstant.EIGHT);
            //从表格第三行开始添加数据
            com.spire.doc.TableRow dataRow = table.getRows().get(r + NumConstant.TWO);
            //设置表格自动高度
            dataRow.setHeightType(TableRowHeightType.Auto);
			//定位表格第三行第一列并设置格式局中
            dataRow.getCells().get(NumConstant.ZERO).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            //填充数据
            TextRange range1 = dataRow.getCells().get(NumConstant.ZERO).addParagraph().appendText(String.valueOf(zgcsExcelBean.getSort()));
            //设置字体,这里是方正楷体_GBK
            range1.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            //设置字体大小,这里是14号
            range1.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
            //下面依次类推,一共是八列

            dataRow.getCells().get(NumConstant.ONE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range2 = dataRow.getCells().get(NumConstant.ONE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getSub1()));
            range2.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range2.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.TWO).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range3 = dataRow.getCells().get(NumConstant.TWO).addParagraph().appendText(String.valueOf(zgcsExcelBean.getNotice()));
            range3.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range3.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.THREE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range4 = dataRow.getCells().get(NumConstant.THREE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getZgcs()));
            range4.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range4.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.FOUR).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range5 = dataRow.getCells().get(NumConstant.FOUR).addParagraph().appendText(String.valueOf(zgcsExcelBean.getPlannedTime()));
            range5.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range5.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.FIVE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range6 = dataRow.getCells().get(NumConstant.FIVE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getLeadLeader()));
            range6.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range6.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.SIX).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range7 = dataRow.getCells().get(NumConstant.SIX).addParagraph().appendText(String.valueOf(zgcsExcelBean.getResponsibleDepartment()));
            range7.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range7.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);

            dataRow.getCells().get(NumConstant.SEVEN).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            TextRange range8 = dataRow.getCells().get(NumConstant.SEVEN).addParagraph().appendText(String.valueOf(zgcsExcelBean.getRelevantDepartments()));
            range8.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
            range8.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
        }
        //保存文档,wordPath要自定义
        document.saveToFile(wordPath, FileFormat.Docx);

生成之后就是:
在这里插入图片描述
原谅我真实数据不能展示出来😔

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spire.Doc for Java是一款功能强大的Java Word组件,可以帮助Java开发者快速实现Word文档的创建、读取和编辑等操作。其中,根据模板生成Word文档是Spire.Doc for Java的一项重要功能,下面简单介绍一下它的使用方法。 1. 创建模板文档 首先,我们需要创建一个Word模板文档,其中包含需要替换的占位符和样式等信息。可以使用Microsoft Word等工具创建模板文档,并将其保存为docdocx格式。 2. 加载模板文档 在Java代码中,使用Spire.Doc for JavaDocument类加载模板文档,代码如下: ```java import com.spire.doc.*; public class LoadTemplate { public static void main(String[] args) { // 创建Document对象 Document doc = new Document(); // 加载模板文档 doc.loadFromFile("template.docx"); } } ``` 其中,loadFromFile方法的参数为模板文档的路径。 3. 替换占位符 接下来,我们需要根据实际需求替换模板文档中的占位符。Spire.Doc for Java提供了replace方法来实现占位符的替换,代码如下: ```java import com.spire.doc.*; public class ReplacePlaceholder { public static void main(String[] args) { // 创建Document对象 Document doc = new Document(); // 加载模板文档 doc.loadFromFile("template.docx"); // 替换占位符 doc.replace("{{name}}", "张三", true, true); doc.replace("{{age}}", "25", true, true); // 保存文档 doc.saveToFile("output.docx", FileFormat.Docx_2013); } } ``` 其中,replace方法的第一个参数为需要替换的占位符,第二个参数为替换后的文本内容,第三个参数表示是否区分大小写,第四个参数表示是否替换整个单词。 4. 设置样式 如果需要设置生成Word文档的样式,可以使用Spire.Doc for Java提供的各种样式类来实现,例如ParagraphStyle、CharacterFormat等。具体使用方法可以参考Spire.Doc for Java的官方文档。 5. 保存文档 最后,调用Document类的saveToFile方法将生成Word文档保存到指定路径,代码如下: ```java doc.saveToFile("output.docx", FileFormat.Docx_2013); ``` 其中,第一个参数为保存的文件路径,第二个参数为保存的文档格式,可以选择docdocx、pdf等多种格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值