成为很厉害很厉害的人,最重要的,就是要热血,永远也不要让你的血凉下去。

JAVA 实现导入导出Excel-02随笔

忙碌的一天

  第一天写博客就让我煞费苦心,从上午完成的第一篇开始,具目前为止已经是下午18:41了;读者可能好奇为什么写这一篇随笔,我只能回答说太无聊了哈哈哈;
  其实不然,刚到公司的时候我一个需求写了15天,还是加班加点的努力,并不是说需求有多么的难,而是自己笨,就要花比别人多2倍的时间;在那次之后我慢慢成长(猥琐发育),所以之前写的很多工具我都封装在工具包了。
  今天还真忙碌了,上午编写代码进行版本迭代->需求评估开会->编辑随笔;下午编辑随笔(中午也在写,然后忘记吃饭了),一眨眼既然下午15:34了,不得不说,沉浸知识海洋中的时间如梭。本想去楼下麦当劳随便吃点的;
  回头却发现人事姐姐拿着下午茶来到了公司(此时此刻心中可是大喜),立马停下手中键盘,连忙带跑的去挑贵的披萨和水果吃。后来回头想想,原来今天是3-8妇女节;该和敬爱的妈妈打通电话了;

目录

  • 导出

    动态数据导出

  • 导出

    对象数据导出


前提

请写好自己的Controller层和Service层->以下代码皆为实现层
添加一个对象数据方便之后的导出

package com.yjw.demo.entity.po.excel;

import com.yjw.demo.commons.utils.ExcelExport;
import lombok.Data;

/**
 * @PROJECT_NAME: demo-all
 * @DESCRIPTION:
 * @USER: YanJiaWei
 * @DATE: 2023/3/8 17:40
 */
@Data
public class ExcelEntity {

    /**
     * TODO ExcelExport->是什么!
     * TODO example->默认的样本数据
     * TODO kv->数据映射
     * TODO sort->调整表头顺序
     */
    @ExcelExport(value = "姓名", example = "孙悟空",sort = 1)
    private String name;

    @ExcelExport(value = "年龄", example = "99",sort = 2)
    private Integer age;

    @ExcelExport(value = "性别", example = "男",kv = "1-男;2-女",sort = 4)
    private Integer sex;

    @ExcelExport(value = "电话", example = "0755888888",sort = 3)
    private String tel;

    @ExcelExport(value = "城市", example = "花果山",sort = 5)
    private String city;
}


一、动态数据导出

简单导出数据

    /**
     * 简单导出数据
     *
     * @param response
     */
    public void exportSimpleness(HttpServletResponse response) {
        // 表头数据
        List<Object> head = Arrays.asList("姓名", "年龄", "性别", "头像");
        // 用户1数据
        List<Object> user1 = new ArrayList<>();
        user1.add("孙悟空");
        user1.add(99);
        user1.add("男");
        user1.add("https://pics0.baidu.com/feed/64380cd7912397dd0195bf0bcab894bfd1a28797.jpeg?token=3961483ed93336e4c2b9870ce34b0165");
        // 用户2数据
        List<Object> user2 = new ArrayList<>();
        user2.add("猪八戒");
        user2.add(80);
        user2.add("女");
        user2.add("https://p6.itc.cn/q_70/images03/20210112/cf7f415594f24266a03d5e54496c7509.jpeg");
        // TODO 将数据汇总
        List<List<Object>> sheetDataList = new ArrayList<>();
        sheetDataList.add(head);// 添加表头
        sheetDataList.add(user1);// 添加数据1
        sheetDataList.add(user2);// 添加数据2
        // 导出数据
        ExcelUtils.export(response, "简单导出数据", sheetDataList);
    }

导出包含图片的excel数据

/**
     * 导出包含图片的excel数据
     *
     * @param response
     */
    public void exportImg(HttpServletResponse response) throws MalformedURLException {
        // 表头数据
        List<Object> head = Arrays.asList("姓名", "年龄", "性别", "头像");
        // 用户1数据
        List<Object> user1 = new ArrayList<>();
        user1.add("孙悟空");
        user1.add(99);
        user1.add("男");
        // TODO 导出图片->抛出异常0->选择java.net下的URL
        user1.add(new URL("https://pics0.baidu.com/feed/64380cd7912397dd0195bf0bcab894bfd1a28797.jpeg?token=3961483ed93336e4c2b9870ce34b0165"));
        // 用户2数据
        List<Object> user2 = new ArrayList<>();
        user2.add("猪八戒");
        user2.add(80);
        user2.add("女");
        user2.add(new URL("https://p6.itc.cn/q_70/images03/20210112/cf7f415594f24266a03d5e54496c7509.jpeg"));
        // 将数据汇总
        List<List<Object>> sheetDataList = new ArrayList<>();
        sheetDataList.add(head);// 添加表头
        sheetDataList.add(user1);// 添加数据1
        sheetDataList.add(user2);// 添加数据2
        // 导出数据
        ExcelUtils.export(response, "导出包含图片的excel数据", sheetDataList);
    }

下拉列表

/**
     * 下拉列表
     *
     * @param response
     */
    public void exportPullDown(HttpServletResponse response) throws MalformedURLException {
        // 表头数据
        List<Object> head = Arrays.asList("姓名", "年龄", "性别", "头像  ");
        // 用户1数据
        List<Object> user1 = new ArrayList<>();
        user1.add("孙悟空");
        user1.add(99);
        user1.add("男");
        user1.add(new URL("https://pics0.baidu.com/feed/64380cd7912397dd0195bf0bcab894bfd1a28797.jpeg?token=3961483ed93336e4c2b9870ce34b0165"));
        // 用户2数据
        List<Object> user2 = new ArrayList<>();
        user2.add("猪八戒");
        user2.add(80);
        user2.add("女");
        user2.add(new URL("https://p6.itc.cn/q_70/images03/20210112/cf7f415594f24266a03d5e54496c7509.jpeg"));
        // 将数据汇总
        List<List<Object>> sheetDataList = new ArrayList<>();
        sheetDataList.add(head);// 添加表头
        sheetDataList.add(user1);// 添加数据1
        sheetDataList.add(user2);// 添加数据2
        // TODO 设置下拉框(K为第几列(从0开始),Y为下拉数据)
        Map<Integer, List<String>> selectMap = new HashMap<>(1);
        selectMap.put(2, Arrays.asList("男", "女"));
        // 导出数据
        ExcelUtils.export(response, "下拉列表", sheetDataList, selectMap);
    }

横向合并

   /**
     * 横向合并
     *
     * @param response
     */
    public void exportMerge2(HttpServletResponse response) throws MalformedURLException {
        // 表头数据
        List<Object> head = Arrays.asList("姓名", "年龄", "性别", "头像  ", ExcelUtils.COLUMN_MERGE);// TODO 合并头像字段
        // 用户1数据
        List<Object> user1 = new ArrayList<>();
        user1.add("孙悟空");
        user1.add(99);
        user1.add("男");
        user1.add(new URL("https://pics0.baidu.com/feed/64380cd7912397dd0195bf0bcab894bfd1a28797.jpeg?token=3961483ed93336e4c2b9870ce34b0165"));
        user1.add(new URL("https://pics0.baidu.com/feed/64380cd7912397dd0195bf0bcab894bfd1a28797.jpeg?token=3961483ed93336e4c2b9870ce34b0165"));
        // 用户2数据
        List<Object> user2 = new ArrayList<>();
        user2.add("猪八戒");
        user2.add(80);
        user2.add("女");
        user2.add(new URL("https://p6.itc.cn/q_70/images03/20210112/cf7f415594f24266a03d5e54496c7509.jpeg"));
        user2.add(new URL("https://p6.itc.cn/q_70/images03/20210112/cf7f415594f24266a03d5e54496c7509.jpeg"));
        // 将数据汇总
        List<List<Object>> sheetDataList = new ArrayList<>();
        sheetDataList.add(head);// 添加表头
        sheetDataList.add(user1);// 添加数据1
        sheetDataList.add(user2);// 添加数据2
        // TODO 设置下拉框(K为第几列(从0开始),Y为下拉数据)
        Map<Integer, List<String>> selectMap = new HashMap<>(1);
        selectMap.put(2, Arrays.asList("男", "女"));
        // 导出数据
        ExcelUtils.export(response, "横向合并", sheetDataList, selectMap);
    }

纵向合并

   /**
     * 纵向合并
     *
     * @param response
     */
    public void exportMerge1(HttpServletResponse response) throws MalformedURLException {
        // 表头数据
        List<Object> head = Arrays.asList("归属地", "姓名", "年龄", "性别", "地址");// TODO 合并头像字段
        // 用户1数据
        List<Object> user1 = new ArrayList<>();
        user1.add("东土大唐");
        user1.add("孙悟空");
        user1.add(99);
        user1.add("男");
        user1.add("花果山");
        // 用户2数据
        List<Object> user2 = new ArrayList<>();
        user2.add("东土大唐");
        user2.add("猪八戒");
        user2.add(80);
        user2.add("男");
        user2.add("高老庄");

        List<Object> user3 = new ArrayList<>();
        user3.add("东土大唐");
        user3.add("嫦娥");
        user3.add(20);
        user3.add("女");
        // TODO 纵向合并 和猪八戒一个地方
        user3.add(ExcelUtils.ROW_MERGE);

        List<Object> user4 = new ArrayList<>();
        user4.add("东土大唐");
        user4.add("沙悟净");
        user4.add(78);
        user4.add("男");
        user4.add("流沙河");

        // 将数据汇总
        List<List<Object>> sheetDataList = new ArrayList<>();
        sheetDataList.add(head);// 添加表头
        sheetDataList.add(user1);// 添加数据1
        sheetDataList.add(user2);// 添加数据2
        sheetDataList.add(user3);// 添加数据3
        sheetDataList.add(user4);// 添加数据4

        // 设置下拉框(K为第几列(从0开始),Y为下拉数据)
        Map<Integer, List<String>> selectMap = new HashMap<>(1);
        selectMap.put(2, Arrays.asList("男", "女"));
        // 导出数据
        ExcelUtils.export(response, "纵向合并", sheetDataList, selectMap);
    }


二、对象数据导出(前提所注的ExcelEntity对象)

简单模板对象导出数据

  /**
     * TODO 简单模板对象导出数据
     */
    public void exportObjectSimpleness1(HttpServletResponse response) {
        ExcelUtils.exportTemplate(response, "对象导出数据", ExcelEntity.class);
    }

简单模板对象导出样本数据

    /**
     * TODO 对象导出样本数据
     */
    public void exportObjectSimpleness2(HttpServletResponse response) {
        // TODO boolean isContainExample->第三个参数可以控制,附样本数据
        ExcelUtils.exportTemplate(response, "对象导出样本数据", ExcelEntity.class, true);
    }


按List对象导出数据

     /**
     * TODO 按List对象导出数据
     */
    public void exportObjectList(HttpServletResponse response) {
        // TODO 构建假数据->真实环境下数据应从【数据库与业务逻辑】结合取来
        List<ExcelEntity> excelList = new ArrayList<>();

        ExcelEntity entity1 = new ExcelEntity();
        entity1.setName("孙悟空");
        entity1.setAge(99);
        entity1.setSex(1);
        entity1.setTel("0755888888");
        entity1.setCity("花果山");
        ExcelEntity entity2 = new ExcelEntity();
        entity2.setName("猪八戒");
        entity2.setAge(97);
        entity2.setSex(1);
        entity2.setTel("0755866888");
        entity2.setCity("高老庄");
        ExcelEntity entity3 = new ExcelEntity();
        entity3.setName("嫦娥");
        entity3.setAge(20);
        entity3.setSex(2);
        entity3.setTel("0755866888");
        entity3.setCity(ExcelUtils.ROW_MERGE);
        ExcelEntity entity4 = new ExcelEntity();
        entity4.setName("嫦娥");
        entity4.setAge(90);
        entity4.setSex(1);
        entity4.setTel("0755877788");
        entity4.setCity("流沙河");

        excelList.add(entity1);
        excelList.add(entity2);
        excelList.add(entity3);
        excelList.add(entity4);

        // TODO 导出数据
        ExcelUtils.export(response, "按List对象导出数据", excelList, ExcelEntity.class);

    }

多Sheet页导出

  /**
     * TODO 多Sheet页导出
     */
    public void exportObjectSheet1(HttpServletResponse response) {


        // TODO 第 1 个 Sheet 页
        List<List<Object>> sheet1 = new ArrayList<>();
        // 第一页的表头
        List<Object> sheet1Head = new ArrayList<>();
        sheet1Head.add("姓名");
        sheet1Head.add("数学");
        sheet1Head.add("英语");
        sheet1.add(sheet1Head);
        // 第一页的数据
        List<Object> row1 = new ArrayList<>();
        row1.add("Jack");
        row1.add(85);
        row1.add(100);
        sheet1.add(row1);
        // 第一页的数据
        List<Object> row2 = new ArrayList<>();
        row2.add("Marry");
        row2.add(85);
        row2.add(100);
        sheet1.add(row2);


        // TODO 第 2 个 Sheet 页
        List<List<Object>> sheet2 = new ArrayList<>();
        // 第二页的表头
        List<Object> sheet2Head = new ArrayList<>();
        sheet2Head.add("姓名");
        sheet2Head.add("音乐");
        sheet2Head.add("美术");
        sheet2.add(sheet2Head);
        // 第二页的数据
        List<Object> row01 = new ArrayList<>();
        row01.add("Jack");
        row01.add(77);
        row01.add(66);
        sheet2.add(row01);
        // 第二页的数据
        List<Object> row02 = new ArrayList<>();
        row02.add("Marry");
        row02.add(99);
        row02.add(88);
        sheet2.add(row02);


        // TODO 将两个 Sheet 页添加到集合中
        Map<String, List<List<Object>>> sheets = new LinkedHashMap<>();
        sheets.put("文化课", sheet1);
        sheets.put("艺术课", sheet2);
        // 导出数据
        ExcelUtils.exportManySheet(response, "多Sheet页导出", sheets);
    }

多Sheet页导出解耦合

 public void exportObjectSheet2(HttpServletResponse response) {
        // TODO 将两个 Sheet 页添加到集合中
        Map<String, List<List<Object>>> sheets = new LinkedHashMap<>();
        // 将每一页抽开实现->面向对象程序设计(OOP)
        sheets.put("文化课", sheet1());
        sheets.put("艺术课", sheet2());
        // 导出数据
        ExcelUtils.exportManySheet(response, "多Sheet页导出解耦合", sheets);
    }

    public List<List<Object>> sheet1() {
        // TODO 第 1 个 Sheet 页
        List<List<Object>> sheet1 = new ArrayList<>();
        // 第一页的表头
        List<Object> sheet1Head = new ArrayList<>();
        sheet1Head.add("姓名");
        sheet1Head.add("数学");
        sheet1Head.add("英语");
        sheet1.add(sheet1Head);
        // 第一页的数据
        List<Object> row1 = new ArrayList<>();
        row1.add("Jack");
        row1.add(85);
        row1.add(100);
        sheet1.add(row1);
        // 第一页的数据
        List<Object> row2 = new ArrayList<>();
        row2.add("Marry");
        row2.add(85);
        row2.add(100);
        sheet1.add(row2);
        return sheet1;
    }

    public List<List<Object>> sheet2() {
        // TODO 第 2 个 Sheet 页
        List<List<Object>> sheet2 = new ArrayList<>();
        // 第二页的表头
        List<Object> sheet2Head = new ArrayList<>();
        sheet2Head.add("姓名");
        sheet2Head.add("音乐");
        sheet2Head.add("美术");
        sheet2.add(sheet2Head);
        // 第二页的数据
        List<Object> row01 = new ArrayList<>();
        row01.add("Jack");
        row01.add(77);
        row01.add(66);
        sheet2.add(row01);
        // 第二页的数据
        List<Object> row02 = new ArrayList<>();
        row02.add("Marry");
        row02.add(99);
        row02.add(88);
        sheet2.add(row02);
        return sheet2;
    }

如:各位读者还不会使用
不需要全文看明白,可认真分析一个章节的代码如注解
望:各位读者有所感悟与帮助【本章节结束】

posted @ 2023-03-08 19:26  顾留芳啊  阅读(105)  评论(0编辑  收藏  举报