Java操作word

这篇具有很好参考价值的文章主要介绍了Java操作word。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

生命无罪,健康万岁,我是laity。

我曾七次鄙视自己的灵魂:

第一次,当它本可进取时,却故作谦卑;

第二次,当它在空虚时,用爱欲来填充;

第三次,在困难和容易之间,它选择了容易;

第四次,它犯了错,却借由别人也会犯错来宽慰自己;

第五次,它自由软弱,却把它认为是生命的坚韧;

第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;

第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。

动态数据生成word报表,其实是前端的活(前端做简单),如果这个活现在担任在"各位"后端身上,就希望本文能够给予你一定的帮助吧!

Java操作Word

方案一

使用easypoi + jfree
操作比较简单,如果你的报表生成也简单的情况推荐使用;
有需要的小伙伴可以直接看Java生成Word

问题

  • 这个是比较好实现的,但easypoi问题太多,而且版本兼容性差的很;
  • 有兴趣的小伙伴可以去看开源仓库;
  • 就是按下葫芦浮起瓢,你懂我的意思吧。

方案二

poi-tl
个人认为是比较好用,但是如果后端动态数据过多的情况下,建议还是由前端来做为好,双方都可以轻松。
官方文档
文档很详细,该有的都有,就是封装几个poi-tl相关工具类

依赖导入

        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.10.0</version>
        </dependency>

工具类

/**
 * Poi-tl模板引擎官方文档:http://deepoove.com/poi-tl/1.10.x/
 * @author: Laity
 * @Project: JavaLaity
 * @Description: word工具类
 */
@Slf4j
public class WordUtil {

    /**
     * 根据模板填充内容生成word,并下载
     */
    public static void downloadWord(HttpServletResponse response, XWPFTemplate template) {

        ServletOutputStream outputStream;
        try {
        	//out = new FileOutputStream(filePath);//输出路径(下载到指定路径)
            // 将填充之后的模板写入filePath
            outputStream=response.getOutputStream();
            //将template写到OutputStream中
            template.write(outputStream);
        	outputStream.flush();
        	outputStream.close();
        	template.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 只得到这个对象本身的所有属性名及属性值
     * @param target 目标对象
     * @return Map集合
     * @throws IntrospectionException 反射异常
     */
    public static Map<String,Object> getOnlySelfFieldNameAndValue(Object target) throws IntrospectionException {
        Map<String,Object> map=new HashMap<>();
        Class<?> clazz = target.getClass();
        Field[] tableFields = clazz.getDeclaredFields();
        getAllFieldNameAndValue(target,map,tableFields,clazz);
        return map;
    }

    /**
     * 递归获取某个类及其所有父类的所有字段
     */
    private static Field[] getSuperClassFields(Field[] tableFields, Class<?> clazz) {
        Class<?> superClazz = clazz.getSuperclass();
        if (superClazz.equals(Object.class)) {
            return tableFields;
        }
        Field[] tableSuperFields = superClazz.getDeclaredFields();

        Field[] c = new Field[tableFields.length + tableSuperFields.length];
        System.arraycopy(tableFields, 0, c, 0, tableFields.length);
        System.arraycopy(tableSuperFields, 0, c, tableFields.length, tableSuperFields.length);
        getSuperClassFields(c, superClazz);
        return c;
    }
}

Controller层

/**
 * https://deepoove.com/poi-tl/1.10.x/#hack-loop-table
 * @author: Laity
 * @Project: JavaLaity
 * @Description: word导出接口层
 */
@RestController
@RequestMapping("/word")
@Slf4j
public class WordController {

    @Value("${file.readPath}")
    private String basePath;


    @GetMapping("/test")
    public void jiangDu(HttpServletResponse response){
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;fileName=test.docx");
        /* word模板地址*/
        String resource=basePath+"test.docx";
		Map<String, Object> map=new HashMap<>();
		
		// 放测试数据 - 也可以嵌套map,也可以放对象,根据自己的数据进行数据处理
		map.put("title", "测试");
        // 读取模板templatePath并将paramMap的内容填充进模板,即编辑模板(compile)+渲染数据(render)
        /*-------------------策略渲染---------------------*/
        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); // 这个有很多方式,有需要直接看文档
        // Configure config = Configure.builder().bind("你设置的标签名", 你的渲染策略:policy).build();
        XWPFTemplate template = XWPFTemplate.compile(resource, config).render(map);

        //这里进行导出
        WordUtil.downloadWord(response,template);
    }
}

文章中的逻辑代码较为简单,建议去看官方文档来进行使用

问题

  • 资源消耗相比较之下较大些

前端Vue操作Word(easy)

  • jszip
    • jszip是一个用于创建、读取和编辑.zip文件的JavaScript库,且API的使用也很简单。
  • jszip-utils
    • jszip-utils是与jszip一起使用的跨浏览器的工具库
    • 使用getBinaryContent():读取并获得模板文件的二进制内容

  • docxtemplater
    • docxtemplater是一种邮件合并工具,它以编程方式使用,处理条件、循环,并且可以扩展为表格、HTML、图像等。
  • FileSaver
    • FileSaver.js 是在客户端保存文件的解决方案,非常适合需要生成文件,或者保存不应该发送到外部服务器的敏感信息的应用。
    • 使用saveAs(blob, “test.docx”):将目标文件对象保存为目标类型的文件,并命名

人生如一场修行。得意时,一日看尽长安花;艰难时,潦倒新停浊酒杯。但生命的跋涉不能回头,哪怕畏途巉岩不可攀,也要会当凌绝顶;哪怕无人会登临意,也要猛志固常在。我是Laity,正在前行的Laity。文章来源地址https://www.toymoban.com/news/detail-726409.html

到了这里,关于Java操作word的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Laravel 开发遇到的相关问题

    对 laravel job 队列的代码进行了修改,但是没有生效,查看了一下官方手册,原来要执行一下: Call to undefined method SymfonyComponentHttpFoundationBinaryFileResponse::header()

    2024年02月09日
    浏览(38)
  • 开发中遇到的 cookie 问题

    1. cookie 无法跨域携带问题 尽管已经登录,但是请求接口返回状态码:202,msg: \\\'未登录\\\',如下图所示; 1.1 XMLHttpRequest.withCredentials未设置 如果需要跨域 AJAX 请求发送 Cookie,需要withCredentials属性设为true。 ① axios 按下图所示配置 ② fetch 按下图所示配置 1.2 Access-Control-Allow-Or

    2024年02月16日
    浏览(30)
  • 遇到跨端开发或多项目开发时,遇到的一些问题探讨,后端开发语言如何选择?

    ​最近有同学问我,做后端开发项目时用php,java,c#,go,pathon...哪个好,从最近阿里云、美团服务器崩溃来看,我想给你最直接的回答是,没有完美的,只有适合自己的。咱们讨论最多的问题就是跨多端开发,以及多项目开发后期所带来的升级、维护等相关问题,接下来就

    2024年02月04日
    浏览(47)
  • JAVA POI操作word一篇就够(超级实用)

    针对java操作word,大家有不懂的可以在评论区留言。 最近做项目要用到word导出和导入,从网上找资料,发现都是一些零零散散的碎片,不能一步到位,经过项目的论证,站到业务和技术的角度,写一篇java通过poi,自定义word模板,对word文档内容进行替换,对文档中表格进行填

    2024年02月12日
    浏览(41)
  • Golang通过Gorm操作Mysql时遇到的datetime时区问题

    golang使用Gorm操作MySQL,MySQL中数据类型是datetime,Golang中用的是time.now。 但是会导致存储的时间与北京时间有8h误差, 显然是没有初始化时区导致。 参考我自己之前写过的一篇总结——Mysql中多种日期类型——DATETIME、TIMESTAMP、TIME、YEAR、DATE的区分 datetime是给什么就存什么,

    2024年01月20日
    浏览(40)
  • Python爬虫:js逆向调式操作及调式中遇到debugger问题

    1. 前言 本篇博客主要讲解js逆向调式操作及调式中遇到debugger问题,内容参考自网上的一些视频讲解结合自己所做过的爬虫测试,觉得小编总结的还不错的读者记得点赞支持一下( 内容仅供学习使用 )。 2. js逆向调式操作 2.1 DOM事件断点 比如虎牙直播登录操作,想快速找到找到

    2024年02月13日
    浏览(48)
  • 开发过程中遇到的问题以及解决方法

    巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 简单易用的git命令 git命令: 查看有几个分支:git branch -a 切换分支:git checkout 分支名称 下载项目:git clone url 拉取项目:每次提交代码之前都需要,相当于更新代码

    2024年02月13日
    浏览(48)
  • ubuntu开发环境搭建遇到问题与解决

    ubuntu与windows可以进行复制粘贴操作: 更新源 ssh安装: samba环境搭建

    2024年02月07日
    浏览(45)
  • 前端(一)——前端开发遇到的普遍问题以及解决策略

    😄博主:小猫娃来啦 😄文章核心: 前端开发遇到的普遍问题以及解决策略 有人说vue框架是基于mvvm实现的?这种说法对吗? mvc和mvvm的区别是什么? mvvm是否是mvc的升级? mvvm和mvc有什么关系?为什么有人说mvvm是基于mvc实现的? 什么时候使用mvc模式,什么时候使用mvvm模式?

    2024年02月08日
    浏览(43)
  • Flutter 插件开发遇到的问题及解决方案

    本文主要对笔者flutter插件开发过程中如下问题做了解决。 一、Flutter插件android模块中的代码报红问题解决 二、Flutter Plugin 开发中引入本地 aar 包报错的问题。 三、Flutter插件项目中获取到 Activity 1、在开发Flutter插件时,打开插件的android项目,准备编写native端的代码时,发现各

    2024年02月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包