Java EasyWord导出word文档

参考链接:

https://blog.csdn.net/weixin_47215296/article/details/125149487

上面的文章已经说明了使用方法,我再说下我使用的经历。我们在使用Java EasyWord导出word的时候多行数据无法正确导出,解决方案如下,请参考

maven依赖
<dependency>
    <groupId>com.sushengren</groupId>
    <artifactId>easyword</artifactId>
    <version>1.1.5</version>
</dependency>
模板生成
模板生成变量的插入有两种方式:

花括号加变量名,例如:{title}。我在实际使用过程中,发现这种方式有时候会插入失败,不知道什么原因。
在word中用书签的方式插入
这里我重点说一下,对于有表格导出需求的文档模板怎么设置。

1.单一表格。先在你的word文档中,加入表格,包含表头和一行tr。表格的样式你可以随意设置,最主要的是下面的一行tr,选中并给它一个书签(不要选择表头),书签名称就是你实体类中@WordProperty注解的内容,后面测试代码中可以很清楚的看到。表格行设置完成之后,再来设置单元格,单元格里面用花括号加上行的书签名称,下划线,单元格名称。

我使用的时候遇到过表格只能展示一行的情况,可以这么操作,在插入行书签的时候,先选择两行,插入完书签之后删掉最后一行。

2.多个表格。先创建表格,选中你想循环创建表格的内容,并给上书签。

然后选择表格行再加上书签。

这是我测试的整体模板,以及最终的效果展示,供大家参考。

测试代码
import com.sushengren.easyword.EasyWord;
import com.sushengren.easyword.annotation.WordProperty;
import com.sushengren.easyword.converters.PictureConverter;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
 
import java.io.*;
import java.util.ArrayList;
import java.util.List;
 
@Data
@Builder
@AllArgsConstructor
public class TestWord {
    /**
     * 标题
     */
    @WordProperty("title")
    private String title;
    /**
     * 水果列表
     */
    @WordProperty("水果列表")
    private List<FruitTable> fruitTables;
    /**
     * 商品列表
     */
    @WordProperty("商品列表")
    private List<CommodityTable> commodityTables;
    /**
     * 图片
     */
    @WordProperty(value = "logo", converter = PictureConverter.class)
    private InputStream logo;
 
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class FruitTable {
        /**
         * 名称
         */
        @WordProperty("名称")
        private String name;
        /**
         * 来源
         */
        @WordProperty("来源")
        private String source;
        /**
         * 单价
         */
        @WordProperty("单价")
        private Double price;
        /**
         * 描述
         */
        @WordProperty("描述")
        private String desc;
    }
 
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class CommodityTable {
        /**
         * 商品类别
         */
        @WordProperty("商品类别")
        private String type;
        /**
         * 商品说明
         */
        @WordProperty("商品说明")
        private String desc;
        /**
         * 类别列表
         */
        @WordProperty("类别列表")
        private List<CategoryTable> categoryTable;
    }
 
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class CategoryTable {
        /**
         * 名称
         */
        @WordProperty("名称")
        private String name;
        /**
         * 来源
         */
        @WordProperty("来源")
        private String source;
        /**
         * 单价
         */
        @WordProperty("单价")
        private Double price;
        /**
         * 描述
         */
        @WordProperty("描述")
        private String desc;
    }
 
    public static void main(String[] args) throws FileNotFoundException {
        List<FruitTable> fruitTables = new ArrayList<>();
        FruitTable f1 = new FruitTable("苹果", "烟台", 5.0, "又红又大的苹果。");
        fruitTables.add(f1);
        FruitTable f2 = new FruitTable("芒果", "海南", 8.0, "好吃不贵的芒果。");
        fruitTables.add(f2);
        FruitTable f3 = new FruitTable("柑橘", "宜昌", 2.5, "好一个柑橘。");
        fruitTables.add(f3);
 
        List<CategoryTable> categoryTables1 = new ArrayList<>();
        CategoryTable a1 = new CategoryTable("芭蕉", "火焰山", 6.5, "烈日炎炎,芭蕉冉冉。");
        categoryTables1.add(a1);
        CategoryTable a2 = new CategoryTable("樱桃", "泰安", 25.0, "红了樱桃,绿了芭蕉。");
        categoryTables1.add(a2);
        List<CommodityTable> commodityTables = new ArrayList<>();
        CommodityTable c1 = new CommodityTable("水果", "这是一批水果", categoryTables1);
        commodityTables.add(c1);
 
        List<CategoryTable> categoryTables2 = new ArrayList<>();
        CategoryTable a3 = new CategoryTable("空调", "小行星", 2800.0, "全靠空调续命。");
        categoryTables2.add(a3);
        CategoryTable a4 = new CategoryTable("热水器", "哈哈哈", 1525.0, "零冷水。");
        categoryTables2.add(a4);
        CommodityTable c2 = new CommodityTable("家电", "这是一堆家电", categoryTables2);
        commodityTables.add(c2);
 
        TestWord testWord = TestWord.builder()
                .title("这是一个word导出测试")
                .fruitTables(fruitTables)
                .commodityTables(commodityTables)
                .logo(new FileInputStream("D:\\Temp\\ai.png"))
                .build();
        File file = new File("D:\\Temp\\title.docx");
        FileOutputStream out = new FileOutputStream("D:\\Temp\\测试.docx");
        EasyWord.of(file).doWrite(testWord).toOutputStream(out);
    }
}

写在最后
我使用的时候遇到一些问题:

1.插入的段落中如果有“回车”,那么这个段落的最后会自动加上一个回车。

这是没有回车的,导出来很正常

 如果我加上回车,就会看到导出的段落最后莫名的多了一个换行,这算是一个小坑吧。

2.有图片书签,但是没有插入图片时报错问题。

解决思路
对于上述两个问题,我是直接覆盖了源代码,供大家参考。


                        
原文链接:https://blog.csdn.net/weixin_41776616/article/details/128564791

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EasyJWeb综述 EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及精华,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源框架。 EasyJWeb由主要由四个部分组成: 1、核心MVC。EasyJWeb的核心是一个基于模板技术实现的MVC框架;他能让我们用非常简洁的代码写基于Java的Web应用。 2、容器及通用业务逻辑封装。作为一个旨在让基于Java的Web应用程序开发变得直接、快速、简易的框架,EasyJWeb提供了一个IoC容器,并对企业级应用中的一些通用业务逻辑(如分页、查询、DAO等)进行了抽象及封装,提供了一套可以直接操作、应用企业资源的组件及API。 3、代码生成引擎及工具。仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。如数据库添删改查(CRUD)代码生成、自动页面模版生成、自动配置文件管理等。 4、EasyJWeb插件体系,项目中的各种实用功能的扩展,可以灵活地通过基于插件的形式安装到EasyJWeb中,提供各种针对性的功能。如ajax实用插件、代码生成插件等。
在使用easy-poi导出word模板中的表格时,需要按照以下步骤进行操作。 首先,我们需要准备一个word模板文件,其中包含了我们想要导出的表格的样式和布局。可以使用Microsoft Word或其他支持word格式的编辑软件创建和编辑模板。 接下来,我们需要使用easy-poi的API来读取和处理模板文件。首先,我们需要创建一个`TemplateExportParams`对象,指定模板文件的路径。 然后,我们可以通过调用`ExcelExportUtil.exportWord`方法来根据模板生成word文件。在导出过程中,我们可以使用`Map`或`List<Map>`对象作为数据源,用于填充模板中的表格单元格。 对于简单的表格,我们可以使用`Map`对象来存储数据。其中,键对应模板中的字段名,值对应字段要显示的数据。如果我们需要填充多行表格,可以使用`List<Map>`来存储多个`Map`对象。 在代码中,我们可以使用以下语句来导出word文件: ```java String templatePath = "模板文件路径"; String outputPath = "导出文件保存路径"; TemplateExportParams exportParams = new TemplateExportParams(templatePath); Map<String, Object> map = new HashMap<>(); map.put("表格数据", 数据源); Workbook workbook = ExcelExportUtil.exportWord(exportParams, map); FileOutputStream fos = new FileOutputStream(outputPath); workbook.write(fos); fos.close(); ``` 其中,"表格数据"是模板中指定的字段名,数据源是存储表格数据的`Map`或`List<Map>`对象。 最后,我们可以保存生成的word文件到指定的输出路径。通过调用`workbook.write`方法将`Workbook`对象写入到输出流中,即可保存为word文件。 以上就是使用easy-poi导出word模板表格的主要步骤。通过简单配置模板和填充数据,我们可以轻松地生成符合需要的word文档

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^止境^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值