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