Java easypoi导出word表格显示

1.成品

2.依赖

        <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.代码

@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内容

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用easyPoi导出word时,需要使用WordExportUtil工具类来生成word文档。要合并列相同的单元格,需要在生成表格时设置合并单元格的信息。 例如,假设要导出以下表格: | 姓名 | 年龄 | 地址 | | :----: | :----: | :----: | | 张三 | 20 | 北京 | | 李四 | 20 | 上海 | | 王五 | 21 | 广州 | 如果要合并年龄相同的单元格,可以按以下步骤操作: 1. 创建一个List对象,用于存储表格数据。 ```java List<Map<String, Object>> dataList = new ArrayList<>(); ``` 2. 设置表头,按照以下格式设置。 ```java Map<String, Object> header = new LinkedHashMap<>(); header.put("姓名", "name"); header.put("年龄", "age"); header.put("地址", "address"); dataList.add(header); ``` 3. 设置表格数据,按照以下格式设置。 ```java Map<String, Object> data1 = new LinkedHashMap<>(); data1.put("name", "张三"); data1.put("age", 20); data1.put("address", "北京"); dataList.add(data1); Map<String, Object> data2 = new LinkedHashMap<>(); data2.put("name", "李四"); data2.put("age", 20); data2.put("address", "上海"); dataList.add(data2); Map<String, Object> data3 = new LinkedHashMap<>(); data3.put("name", "王五"); data3.put("age", 21); data3.put("address", "广州"); dataList.add(data3); ``` 4. 创建一个WordExportContext对象,并设置表格样式。 ```java WordExportContext context = new WordExportContext(); TableStyle tableStyle = new TableStyle(); tableStyle.setBackgroundColor("FFFFFF"); tableStyle.setAlign(STJc.CENTER); tableStyle.setVerticalAlign(STTblVerticalAlignment.CENTER); tableStyle.setBold(false); tableStyle.setFontSize(12); tableStyle.setFontFamily("微软雅黑"); tableStyle.setBorderSize(4); tableStyle.setBorderColor("000000"); context.setTableStyle(tableStyle); ``` 5. 创建一个Table对象,并设置表格样式。 ```java Table table = new Table(); table.setHeaders(dataList.subList(0, 1)); table.setRows(dataList.subList(1, dataList.size())); table.setStyle(tableStyle); ``` 6. 设置合并列信息。 ```java MergeRow[] mergeRows = new MergeRow[1]; mergeRows[0] = new MergeRow(1, 1, 1, 2); table.setMergeRows(mergeRows); ``` 7. 将Table对象添加到WordExportContext对象中。 ```java context.getTables().add(table); ``` 8. 使用WordExportUtil工具类生成word文档。 ```java byte[] byteArray = WordExportUtil.exportWord07("table.docx", context); ``` 以上就是使用easyPoi导出word合并列相同的单元格的步骤。其中,MergeRow对象的参数依次为:起始行、结束行、起始列、结束列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值