Java easypoi导出word表格显示

1.成品

2.依赖

java 复制代码
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.1</version>
        </dependency>

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.4.0</version>
        </dependency>

3.代码

java 复制代码
@Override
    public void importBInfo(HttpServletResponse response,Integer id) {
        TestRecordFault testRecordFault = testRecordFaultMapper.selectById(id);
        List<VehicleParts> vehiclePartsList = vehiclePartsMapper.selectList(new LambdaQueryWrapper<VehicleParts>().eq(VehicleParts::getModelId,
                testRecordFault.getModelId()));
        Map<Integer, VehicleParts> vehiclePartsMap = vehiclePartsList.stream().collect(Collectors.toMap(VehicleParts::getId, vehicleParts -> vehicleParts));
        JSONObject vehicle = new JSONObject();
        Unit unit = null;
        if (StringUtils.isNotBlank(testRecordFault.getVehicleInfo())) {
            vehicle = JSONObject.parseObject(testRecordFault.getVehicleInfo());
            Integer unitId = vehicle.getInteger("unitId");
            if (unitId != null) {
                unit = unitMapper.selectById(unitId);
            }
        }
        // 1 设置编码格式、文件名称
        response.setCharacterEncoding("utf-8");
        String contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
        String fileName = testRecordFault.getFileName() + ".docx";
        response.setContentType(contentType);
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);

        Map<String, Object> map = new HashMap<>();
        // 1.基本属性填充
        map.put("fName", "F" + testRecordFault.getModelId());
        map.put("fileName", Optional.ofNullable(testRecordFault.getFileName()).orElse("--"));
        map.put("modelName", Optional.ofNullable(testRecordFault.getModelName()).orElse("--")); //Optional.ofNullable().orElse("--")
        map.put("powerHours", Optional.ofNullable(vehicle.get("powerHours")).orElse("--"));
        map.put("plateNumber", Optional.ofNullable(vehicle.get("plateNumber")).orElse("--"));
        map.put("powerPackWorking", Optional.ofNullable(vehicle.get("powerPackWorking")).orElse("--"));
        map.put("unitName", Optional.ofNullable(unit.getUnitName()).orElse("--"));
        map.put("powerPackYieldHours", Optional.ofNullable(vehicle.get("powerPackYieldHours")).orElse("--"));
        map.put("factoryDate", Optional.ofNullable(vehicle.get("factoryDate")).orElse("--"));
        map.put("taskPayloadWorkingHours", Optional.ofNullable(vehicle.get("taskPayloadWorkingHours")).orElse("--"));
        map.put("mileage", Optional.ofNullable(testRecordFault.getMileage()).orElse(0.0) );
        map.put("createTime", Optional.ofNullable(testRecordFault.getCreateTime()).orElse("--"));
        map.put("remark",Optional.ofNullable(testRecordFault.getRemark()).orElse("--"));

        //list所属系统

        //拼接数据结构
        // 2.商品详情列表填充
        List<Map<String, Object>> goodsWordList = new ArrayList<>();

        //解析下行数据
        List<DetailToB> list = JSON.parseArray(testRecordFault.getDetail(), DetailToB.class);
        for (int i = 0; i < list.size(); i++) {
            Map<String, Object> goodsMap = new HashMap<>();
            goodsMap.put("id", i+1); //Optional.ofNullable().orElse("--")
            goodsMap.put("testingProcess", Optional.ofNullable(list.get(i).getFileName()).orElse("--")); //检测流程名称
            goodsMap.put("item", Optional.ofNullable(list.get(i).getTestProject()).orElse("--")); //检测项目
            goodsMap.put("result", Optional.ofNullable(list.get(i).getTestResult()).orElse("--")); //检测结果
            goodsMap.put("partsName",Optional.ofNullable(list.get(i).getLittleUnit()).orElse("--")); //对应最小可更换单元
            goodsMap.put("subsystemName",Optional.ofNullable(list.get(i).getGenusSystem()).orElse("--")); //所属分系统
            goodsWordList.add(goodsMap);
        }
        map.put("goods", goodsWordList);

        //导出word
        String location = "/template/testB.docx";
        try {
            XWPFDocument document = new MyXWPFDocument(Objects.requireNonNull(this.getClass().getResourceAsStream(location)));
            // 读取模板
            WordExportUtil.exportWord07(document, map);
            document.write(response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4.模板

5.testB内容

相关推荐
·薯条大王7 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO10 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆10 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光10 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林10 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu11 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手12 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官12 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10512 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth13 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring