Java的XWPFTemplate word生成列表

news/2024/7/24 7:02:30 标签: word

Java的XWPFTemplate工具类导出word.docx的使用_xwpftemplate 语法_youmdt的博客-CSDN博客

如果是表格的列表参考上面这篇文章即可,比较复杂的列表遍历暂时还没找到方法,只能手动创建表格了

上面是模板,非常简单,以为我们是要自己创建表格

先看结果吧

自己写的表格基本就是这样,后面加上换行和宽度高度调节即可。

下面的代码是最基本的,所以也就没加高度换行等调节。有时候再补充上去。

下面的代码比较凌乱,还没开发完成,想整合成一个通用的接口,现在只做了日志的,把没有用的内容删掉即可。凑合着看。


    /**
     * 安全日志通用导出word
     */
    @Override
    public void exportWord(AqscSecurityLog aqscSecurityLog, HttpServletResponse response) throws IOException {

        String filePath = "";
        String filename = "";
        String params1 = aqscSecurityLog.getParams1();

        if (Objects.equals(params1, "1")) { //日报
            filePath = "/word/day.docx";
            filename = "安全日志.docx";
        } else if (Objects.equals(params1, "2")) { //周报
            filePath = "/word/day.docx";
            filename = "安全周报.docx";
        } else if (Objects.equals(params1, "3")) { //月报
            filePath = "/word/day.docx";
            filename = "安全月报.docx";
        } else if (Objects.equals(params1, "4")) { //季报
            filePath = "/word/day.docx";
            filename = "安全季报.docx";
        } else {
            throw new ServiceException("params1不等于1234,请联系管理员!");
        }

        InputStream inputStream = getServiceFile(filePath);
        XWPFTemplate document = XWPFTemplate.compile(inputStream);

        Map<String, Object> data = new HashMap<>();

        List<String> ids = aqscSecurityLog.getIds();

        List<AqscSecurityLog> logs = aqscSecurityLogMapper.selectAqscSecurityLogsByids(ids);
        //日志
        if (Objects.equals(params1, "1")) {
            processingDayData(logs, data, document);
        }

        document.render(data);
        exportWordAfter(document, response, filename);

    }

    //处理日志数据
    private void processingDayData(List<AqscSecurityLog> logs, Map<String, Object> data, XWPFTemplate document) {
        data.put("companyName", logs.get(0).getCompanyName());
        data.put("name", logs.get(0).getFillePerson());

        XWPFTable table2 = document.getXWPFDocument().createTable(1, 2);
        table2.getRow(0).getCell(0).setText("日 期");
        table2.getRow(0).getCell(1).setText("工作内容");
        table2.getRow(0).getCell(0).setWidth("30%");
        table2.getRow(0).getCell(1).setWidth("68%");

        logs.forEach(it -> {

            XWPFTable table = document.getXWPFDocument().createTable(3, 2);


            // 合并左边的三行
            for (int i = 0; i < 3; i++) {
                XWPFTableCell cell = table.getRow(i).getCell(0);
                if (i == 0) {
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
                } else {
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
                }
            }


            // 向表格中插入数据
            if (it.getWeather() != null) { //日期 (星期) (天气)
                table.getRow(0).getCell(0).setText(it.getStringTime() + "(" + it.getWeek() + ")" + it.getWeather());
            } else {
                table.getRow(0).getCell(0).setText(it.getStringTime() + "(" + it.getWeek() + ")");
            }
            table.getRow(0).getCell(1).setText(it.getContent());
            table.getRow(1).getCell(1).setText(it.getExperienceAndExperience());
            table.getRow(2).getCell(1).setText(it.getOtherRecords());


            table.getRow(0).getCell(0).setWidth("30%");
            table.getRow(0).getCell(1).setWidth("68%");


        });
    }


    public void exportWordAfter(XWPFTemplate workbook, HttpServletResponse response, String filename) {
        filename = URLEncodeUtil.encode(filename);
        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.documentz");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=" + filename);
        response.setHeader("filename", filename);
        Assert.isTrue(!ObjectUtils.isEmpty(workbook), "导出遇到了问题,请联系管理员");
        try (ServletOutputStream out = response.getOutputStream()) {
            workbook.write(out);
            workbook.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

如果是返回到浏览器,前端也得配置一下,可以参考下面这篇文章配置

java-excel、word、zip返回前端-CSDN博客


http://www.niftyadmin.cn/n/5180151.html

相关文章

Pytorch数据集读出到transform全过程

最近写代码又遇见了这个问题&#xff0c;又忘记了&#xff0c;于是写一篇博客记录一下。 一般我们使用pytorch获取CIFAR10数据集&#xff0c;一般这样写&#xff1a; mean [0.4914, 0.4822, 0.4465] std [0.2023, 0.1994, 0.2010] transform transforms.Compose([transform…

2023年华为杯数学建模E题——代码复盘(第一问)

2023年华为杯数学建模E题 代码复盘 写在最前面目录问题1a计算时间间隔思路说明代码输出结果 插值求解思路代码输出结果 绘图绘制3D图&#xff08;待修改&#xff09; 问题1b数据预处理思路代码 模型训练思路代码输出结果网格调参代码输出结果 写在最前面 超开心又有点遗憾 结果…

Vue3 watch监视和watchEffect函数

Vue3 中的watch使用效果和Vue2 中配置watch配置项的使用效果是一致的。 使用watch监视之前&#xff0c;需要先对watch进行引入。 import {watch} from vue; 一、监视一个ref对象 以下情况只适用于监视一个ref对象。 watch(监视对象, (newValue, oldValue) > { // 监视操作…

OpenAI 的 CEO Sam Altman :OpenAI 正在研发下一代 AI 模型 GPT-5 但没有承诺发布时间

本心、输入输出、结果 文章目录 OpenAI 的 CEO Sam Altman :OpenAI 正在研发下一代 AI 模型 GPT-5 但没有承诺发布时间前言Sam Altman 接受《金融时报》的采访 消息汇总GPT-4 turboOpenAI 目标 AGI (通用人工智能)弘扬爱国精神OpenAI 的 CEO Sam Altman :OpenAI 正在研发下…

【rl-agents代码学习】02——DQN算法

文章目录 Highway-env Intersectionrl-agents之DQN*Implemented variants*:*References*:Query agent for actions sequence探索策略神经网络实现小结1 Record the experienceReplaybuffercompute_bellman_residualstep_optimizerupdate_target_network小结2 exploration_polic…

正反手基础握拍

羽毛球基本握拍-正手/反手/反手高远 基本三种握拍-自己总结的 宽棱&#xff1a;与拍面平行 窄棱&#xff1a;与拍框平行 侧棱&#xff1a;在宽棱和窄棱之间 羽毛球拍柄的横截面是一个不规整的边形 正手握拍- 基本都差不多 不要苍蝇握拍一把抓就行&#xff0c;要点是大拇指和…

微信小程序:tabbar、事件绑定、数据绑定、模块化、模板语法、尺寸单位

目录 1. tabbar 1.1 什么是tabbar 1.2 配置tabbar 2. 事件绑定 2.1 准备表单 2.2 事件绑定 2.3 冒泡事件及非冒泡事件 3. 数据绑定 3.1 官方文档 4. 关于模块化 5. 模板语法 6. 尺寸单位 1. tabbar 1.1 什么是tabbar 下图中标记出来的部分即为tabbar&#xff1a…

Linux中at命令添加一次性任务

1、工作原理 功能&#xff1a;在某个时间点&#xff0c;执行一次命令。 特点&#xff1a;任务是用户隔离的。 条件&#xff1a;必须要保证atd进程存在。 ps -ef |grep atd 原理&#xff1a;atd进程循环遍历队列里的任务&#xff0c;有则按顺序执行任务&#xff0c;没有&#x…