IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Java利用EasyExcel生成excel(并导入数据) -> 正文阅读

[开发测试]Java利用EasyExcel生成excel(并导入数据)

一、需求:

????????下载列表(支持筛选)所有数据,并生成excel文件

二、实现思路:
? ? ? ? 由于数据量的原因,使用到了es 通过es数据筛选完之后,将数据全部取出,然后转转easyExcel格式的List数据,写入到excel,返回成流。

三、代码:

Controller层

    @ApiOperation(value = "download", notes = "download")
    @GetMapping("/download")
    public void download(HttpServletResponse response
            ,@ApiIgnore CactusContext context,
                         @RequestParam("f") String f,@RequestParam("filterId") String filterId) throws IOException {
        //---- begin---- 构建查询方法 这里是走的es 如果走别的 在这里将数据查出即可---------------
        JSONObject criteria = null;
        if(StringUtils.isNotBlank(filterId)){
            Long aLong = Long.valueOf(filterId.trim());
            Filters filter = filtersService.getOne(Wrappers.<Filters>lambdaQuery().eq(Filters::getAccountId, context.getAccountId())
                    .eq(Filters::getCreatorId, context.getUserId()).eq(Filters::getId, aLong));
            if (Objects.nonNull(filter)){
                criteria = JSONObject.parseObject(filter.getCriteria());
            }
        }else {
            if(StringUtils.isNotBlank(f)){
                criteria =  JSONObject.parseObject(f);
            }else{
                criteria = null;
            }
        }
        // 查询的数据为List集合
        List<SolutionDocument> solutionDocuments = returnAndRefundListService.downloadAndJudgeFilter(context, criteria);
        //---- end---- 构建查询方法 这里是走的es 如果走别的 在这里将数据查出即可---------------
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // 将查询出的数据转成EasyExcel对应的模版类 SolutionExcelData
        List<SolutionExcelData> data = BeanUtils.copyList(solutionDocuments, c -> {
            SolutionExcelData solutionExcelData = BeanUtils.copyProperties(c, SolutionExcelData.class);
            //  to String  这里是设置导出的excel里面时间格式 不需要可以删除
            solutionExcelData.setTicketCreateDate(c.getTicketCreateDate() != null ? timeFormatter.format(c.getTicketCreateDate()) : "");
            solutionExcelData.setOrderPurchaseDate(c.getOrderPurchaseDate() != null ? timeFormatter.format(c.getOrderPurchaseDate()) : "");
            solutionExcelData.setSolutionCreateDate(timeFormatter.format(c.getSolutionCreateDate()));
            return solutionExcelData;
        });

        try{
            // 使用swagger 会导致各种问题,直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 导出文件名称
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
            String name = "solution_List_"+ LocalDate.now()+"_"+dtf.format(LocalDateTimeUtil.now());
            String fileName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xls");

            EasyExcel.write(response.getOutputStream(),SolutionExcelData.class)
                    .autoCloseStream(Boolean.FALSE)
                    .sheet("sheet")
                    .doWrite(data);
        }catch (Exception e){
            log.error("-----error-----------getStackTrace------------ {}"+e.getStackTrace());
            log.error("-----error----------message------------- {}"+e.getMessage());
        }
    }

EasyExcel模版导出类(SolutionExcelData)

import com.alibaba.excel.annotation.ExcelProperty;
import groovy.transform.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
/**
  * @Author: c
  * @Description:
  * @Date:  2022/4/14
  */
@Getter
@Setter
@EqualsAndHashCode
//@HeadRowHeight(value = 23)
public class SolutionExcelData {


    @ExcelProperty(value = "Ticket Number", index = 0)
    private String ticketNumber;

    @ExcelProperty(value = "Ticket Create Date", index = 1)
    private String ticketCreateDate;
    @ExcelProperty(value = "Customer Email", index = 2)
    private String customerEmail;
    @ExcelProperty(value = "Customer Name", index = 3)
    private String customerName;
    @ExcelProperty(value = "Platform", index = 4)
    private String platform;
    @ExcelProperty(value = "Market", index = 5)
    private String market;
    @ExcelProperty(value = "Seller", index = 6)
    private String seller;

    @ExcelProperty(value = "Order Purchase Date", index = 7)
    private String orderPurchaseDate;

    @ExcelProperty(value = "Order Number", index = 8)
    private String orderNumber;
    @ExcelProperty(value = "Product Category", index = 9)
    private String productCategory;
    @ExcelProperty(value = "SKU", index = 10)
    private String sku;
    @ExcelProperty(value = "Items", index = 11)
    private String items;

    @ExcelProperty(value = "SKU Quantity", index = 12)
    private Integer skuQuantity;
    @ExcelProperty(value = "SKU Amount", index = 13)
    private BigDecimal skuAmount;

    @ExcelProperty(value = "Solution Create Date", index = 14)
//    @JsonFormat(pattern="yyyy-MM-dd")
    private String solutionCreateDate;

    @ExcelProperty(value = "Solution Type", index = 15)
    private String solutionType;
    @ExcelProperty(value = "Solution Quantity", index = 16)
    private Long solutionQuantity;
    @ExcelProperty(value = "Solution Amount", index = 17)
    private BigDecimal solutionAmount;
    @ExcelProperty(value = "Currency", index = 18)
    private String currency;
    @ExcelProperty(value = "Solution Note", index = 19)
    private String solutionNote;

}

四、结果:

? ? ? ? 页面请求直接会生成excle文件(可自定义后缀xls、xlsx)?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 16:02:03  更:2022-05-01 16:02:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:20:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码