百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

java进行后台数据写入word模板再进行压缩包下载

yuyutoo 2025-03-02 19:41 6 浏览 0 评论

经常会遇到这样需求,写一个导出功能,进行word模板格式进行导出,数据库相应数据回填到word模板中,再对这个模板进行导出功能。如果一次性需要导出多个模板情况下,就要对多个进行压缩成一个压缩包再一次性导出。

废话不多说直接上代码:

需要导入相应jar包:

controller层:

@GetMapping(value = "/export")
public void export(HttpServletResponse response) {
    try {
        taskServic.exportWordZip(response);
    } catch (Exception e) {
        logger.error("导出失败", e);
    }
}

service层:

/**
 * 获取当前系统的临时目录
 */
public final static String SRC_PATH = System.getProperty("java.io.tmpdir");
/**
 * 导出(zip)
 * @param response
 */
public void exportWordZip( HttpServletResponse response) {
    List files = new ArrayList<>();
   //数据库查出来数据--模拟写个测试数据
    DemoVO vo = new DemoVO();
    vo.setName("测试模板数据"+System.currentTimeMillis());
    String zipFileName = "测试模板数据";
    // 动态获取模板名称
    String templateName = "demo.docx";
    //模板
    String fileName = System.currentTimeMillis()+"";
    //要写入模板里数据
    String tempFileTemplate = generate(vo, templateName, fileName);
    if (tempFileTemplate != null) {
        files.add(new File(tempFileTemplate));
    }
    //压缩包下载
    if (files != null) {
        zipDownload(response, zipFileName + "_" + System.currentTimeMillis() + ".zip", files);
    }
}
/**
 * 生成-模板-数据写入.docx文件模板
 *
 * @return
 */
public String generate(Object object, String templateName, String fileName) {
    // 获取当前系统的临时目录
    String filePath = SRC_PATH;
    String addTimeFileName =  fileName;
    //存储的文件路径  File.separator
    String storeFilePath = filePath + addTimeFileName;
    String docxFilePath = storeFilePath + ".docx";
    //后缀
    String suffix = ".docx";
    XWPFTemplate template = null;
    try (OutputStream os = new FileOutputStream(docxFilePath);
         InputStream inputStream = new ClassPathResource("/templates/" + templateName).getInputStream()) {
        DemoVO vo = (DemoVO) object;
        template = XWPFTemplate.compile(inputStream).render(new HashMap() {{
            put("name", vo.getName());
        }});
        template.write(os);
        os.flush();
        return storeFilePath + suffix;
    } catch (Exception e) {
      //  logger.error("生成模板失败", e);
    } finally {
        if (template != null) {
            try {
                template.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return null;
}
/**
 * zip打包下载
 *
 * @param response
 * @param zipFileName
 * @param fileList
 */
public void zipDownload(HttpServletResponse response, String zipFileName, List fileList) {
    // zip文件路径
    String zipPath = ZipDownloadUtil.FILE_PATH + zipFileName;
    try {
        //创建zip输出流
        try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath))) {
            //声明文件集合用于存放文件
            byte[] buffer = new byte[1024];
            //将文件放入zip压缩包
            for (int i = 0; i < fileList.size(); i++) {
                File file = fileList.get(i);
                try (FileInputStream fis = new FileInputStream(file)) {
                    out.putNextEntry(new ZipEntry(file.getName()));
                    int len;
                    // 读入需要下载的文件的内容,打包到zip文件
                    while ((len = fis.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                    out.closeEntry();
                }
                file.delete();
            }
        }
        //下载zip文件
        ZipDownloadUtil.downFile(response, zipFileName);
    } catch (Exception e) {
      //  logger.error("文件下载出错", e);
    } finally {
        // zip文件也删除
        fileList.add(new File(zipPath));
        ZipDownloadUtil.deleteFile(fileList);
    }
}

看下一个模板内容


看下导出效果:





完美收工。

相关推荐

像这样即能找勾又能打×的下拉菜单,您知道是怎么做的吗?

您知道像这样既能打勾又能打叉的下拉菜单怎么制作吗?比如这是一个考勤表,今天没有来,可以用叉看下拉菜单一个叉,然后这天到了打勾。怎么制作?·第一步,选中要制作的下拉菜单的单元格。·第二步,选择数据菜单里...

Axure教程:制作下拉选择框部件的联动效果

本文通过一个相对简单的示例,介绍了如何制作下拉选择框的联通效果。产品经理在制作产品原型的过程中,经常会遇到部件间联动的效果设计。如果不能通过原型交互方式来完成,则会以“静态页面+文字说明+步骤指引”的...

Excel技巧:最简单的制作下拉列表的方法

在制作报表的时候,经常会输入一些重复性的内容。这时候使用下拉列表直接选择,就可以简化重复输入的操作,不用费时费力地复制粘贴,同时录入信息页更加准确。示例图:操作步骤:...

下拉刷新之后,为什么我惊呆了?

2009年LorenBrichter在Tweetie2中首创了PullDowntoRefresh「下拉刷新」的交互方式,现在这一创举早已成为了各种Feed类应用的标准配置。虽...

每天进步一点点——excel如何设置下拉选项

excel在数据录入的时候,有时候为了方便,不逐条手打,我们常会设置一个下拉选项,直接进行选择。比如性别的录入,就可以偷懒,直接手动选择,比一个个打字要快。最简单下拉选项(以录入性别为例子)第一步,我...

EXCEL表格常用 下拉序号的三种方法 三分钟学会这些方法 详细教程

下拉序号三种方法做表格输入序列号是常有的事,正因为经常输入,我们不好一个一个的去输入,那样太累了。假如有100个序号,我们从一输入到100,会很累的。下面我们学习一下三种输入序号的方法:...

3种方法教你制作Excel中“下拉菜单”

在Excel中,我们经常会面对有很多的数据需要录入,尤其是一些重复的数据。那如何才能解决这个令我们头疼的问题呢,这就是我今天要介绍的下拉菜单的制作。...

表格自动新增下拉选项,Ctrl+T解决重复设置难题,80%人都碰到过

为了方便进行数据输入、汇总及统计,规范我们的Excel表格格式,我们在工作中经常会对单元格进行数据有效性设置,这样可以限定单元格根据下拉选项进行填写内容,让大家按照统一的规范进行输入。如上图所示,我们...

Excel制作搜索式下拉菜单,1条公式,2步搞定

下拉菜单在数据录入的时候,可以提升工作效率,但是如果下拉菜单数据太多的时候,也不好进行选择,我们可以制作成可以搜索的下拉菜单,先输入一个关键字,然后再次进行选择效果如下所示:制作的方法其实很简单,只需...

快速下拉,特别适用于要拉的手断的那种大量数据情况。

办公小技巧:制作更炫酷的Excel下拉菜单

在Excel中制作下拉菜单,大都是利用数据有效性,再有就是表单控件中的组合框。数据有效性或表单控件组合框制作下拉菜单,快捷、便利、实用、功能很全面,但也有力所不及的地方,比如设置下拉菜单的字体、颜色、...

Excel制作智能模糊搜索下拉菜单,1条公式搞定

我们有一列数据,想制作成下拉菜单,然后输入部分关键字,就可以模糊搜索符合条件的值,提供对应的下拉菜单供我们选择,效果如下所示:1、WPS中的EXCELWPS关于下拉菜单,已经做到了智能搜索,所以只需要...

负面下拉词:深入解析与应对策略

你要写负面下拉词,就不能只写负面下拉词。要写信息时代的暗流涌动,数据洪流中潜藏的危机与机遇;要写算法逻辑的冷酷无情,如何在用户行为与数据驱动下,悄然形成负面印象的漩涡;要写品牌与个人的挣扎与抗争,如何...

制作Excel下拉菜单,源数据更新,无需重新设置

在做表格数据录入工作的时候,一方面需要提升数据录入的效率,也需要防止数据录入出错,因此我们会对数据区域设置下拉菜单,从下拉选项中选择我们需要的数据进行录入1、下拉菜单基本设置首先我们要准备下拉菜单的数...

制作2级联动下拉菜单,1分钟搞定,快来学吧!

数据录入的时候,经常需要用到两级下拉菜单,并且需要联动,输入完第一级内容之后,第二级的内容是对应的效果如下所示:制作过程也非常简单,只需要几步就可以完成1、准备数据源第一行中的数据,输入一级下拉菜单中...

取消回复欢迎 发表评论: