根据模板导出文件,解决本地或idea导出可以,测试导出不成功的问题

本功能主要是实现文件的导出,但是有些导出文件格式可能比较复杂,用代码编写比较繁琐,所以,可以事先做好模板,直接读取模板,将数据填充进去即可。

注意点:

	项目是直接读取的jar包,没有解压出来,所以,获取文件的时候,不能用file来获取,只能用文件流的形式。
	项目是直接读取的jar包,没有解压出来,所以,获取文件的时候,不能用file来获取,只能用文件流的形式。
	项目是直接读取的jar包,没有解压出来,所以,获取文件的时候,不能用file来获取,只能用文件流的形式。

整体代码如下:

Controller层:主要是获取workBook,其他是为了兼容浏览器;

/**
 *  导出
 */
@GetMapping("/export")
public String export(EquipmentCloudEyeInfo entity, HttpServletRequest request, HttpServletResponse response) {
    String userAgent = "";
    OutputStream outputStream = null;
    try {
        String fileName = "模板名称.xlsx";
        try {
            //客户端浏览器标识
            userAgent = request.getHeader("USER-AGENT");
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        // 兼容火狐下载
        if (StringUtils.isNotEmpty(userAgent) && StringUtils.contains(userAgent, "Firefox")) {
            fileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?=";
        } else {
            fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
        }
        response.setHeader("Content-disposition", "attachment; filename=" + fileName);
        outputStream = response.getOutputStream();
        response.setContentType("application/octet-stream");

        Workbook workbook = service.export(entity);
        workbook.write(outputStream);
        outputStream.flush();
        return TableUtil.tojson(CodeEnumType.SUCCESS);
    } catch (IOException e) {
        e.printStackTrace();
        return TableUtil.tojson(CodeEnumType.FAILURE);
    } finally {
        try {
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Service层:核心代码;

@Override
public Workbook export(EquipmentCloudEyeInfo entity) throws IOException  {
	//获取模板路径;我的文件是直接放在classes下,根据自己的情况适当修改;
    URL filePath = this.getClass().getClassLoader().getResource("模板名称.xlsx");
    LOGGER.info("模板地址为:"+filePath);

    	//这种写法更通用,可以直接读取jar包里的文件流;
        XSSFWorkbook workbook = new XSSFWorkbook(filePath.openStream());
        XSSFSheet sheet = workbook.getSheetAt(0);
		//获取导出列表;
        List<EquipmentCloudEyeInfo> list = this.list(entity);
        //
        for (int i = 0; i < list.size(); i++) {
            EquipmentCloudEyeInfo info = list.get(i);
            XSSFRow row = sheet.createRow(i + 1);
            String equipmentId = info.getEquipmentId();
            XSSFCell cell = row.createCell(0);
            cell.setCellValue(equipmentId);
            String serialNumber = info.getEquipmentSerialNumber();
            XSSFCell cell1 = row.createCell(1);
            cell1.setCellValue(serialNumber);
            String equipmentBrand = info.getEquipmentBrand();
            XSSFCell cell2 = row.createCell(2);
            cell2.setCellValue(equipmentBrand);

        }
        return workbook;

}

核心代码如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值