工具类包依赖
工欲善其事必先利其器:需要hutool工具依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.7</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency>
这里我的user大概是这些属性
@ApiModelProperty("id")private Integer id;@ApiModelProperty("用户名")private String username;@ApiModelProperty("密码")@JsonIgnoreprivate String password;@ApiModelProperty("呢称")private String nickname;@ApiModelProperty("邮箱")private String email;@ApiModelProperty("电话")private String phone;@DateTimeFormat(value = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@ApiModelProperty("创建时间")private Date createTime;@ApiModelProperty("地址")private String address;private String avatarUrl;
导出数据:
1.数据从哪里来:
我们从数据库中直接获取List把其写入到Hutool工具类的Writer中
此时 excel表格是根据实体类的属性来命名的是英文
所以我们需要addheaderAlias 来把英文设置成对应的中文
2.如何传输:
根据http里面的response 获取返回传输通道
然后把writer写入通道即可 但是要注意设置好请求头和内容
coding:
public void excelexport(HttpServletResponse response) throws Exception {List<User> userList = userMapper.selectAll();ExcelWriter writer= ExcelUtil.getWriter(true);//后面可以指定写入磁盘的路径制定true是浏览器下载writer.addHeaderAlias("id","序号");writer.addHeaderAlias("username","名称");writer.addHeaderAlias("nickname","呢称");writer.addHeaderAlias("email","邮箱");writer.addHeaderAlias("phone","电话号");writer.addHeaderAlias("address","地址");writer.addHeaderAlias("createTime","创建时间");writer.setOnlyAlias(true);//只写进设置了别名的writer.write(userList,true);//把list写到excel还没有传输到前端//设置前端响应格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");String fileName= URLEncoder.encode("用户信息","UTF-8");response.setHeader("Content-disposition","attachment;filename="+fileName+".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out,true);out.close();writer.close();}
导出数据
1.数据来源:
前段传入文件 使用MultipartFile file 接收 文件不好操作转换成字节流 InputStream inputStream=file.getInputStream();//文件变成字节流
ExcelReader excelReader = ExcelUtil.getReader(inputStream);//读入到excel
2.如何读取:
数据到excelReader之后直接使用read方法读取 read(1)表从第二行数据开始读取(第一行是各种属性名)每一行数据是一个List 每一行中的属性是Object 整个数据就是List<List> readlist
我们需要获取到一行数据 然后new User 然后循环设置属性 插入数据库。完成保存即为导入的过程。
coing:
public void excelimport(MultipartFile file) throws Exception {InputStream inputStream=file.getInputStream();//文件变成字节流ExcelReader excelReader = ExcelUtil.getReader(inputStream);//读入到excelList<List<Object>> readlist = excelReader.read(1);//从第一行开始读取List<User>userList=new ArrayList<User>();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for(int i=0;i<readlist.size();i++){List<Object>list=readlist.get(i);//获取一行数据User user=new User();user.setUsername(list.get(1).toString());user.setNickname(list.get(2).toString());user.setEmail(list.get(3).toString());user.setPhone(list.get(4).toString());user.setAddress(list.get(5).toString());String mydate=list.get(6).toString();Date createTime = dateFormat.parse(mydate);user.setCreateTime(createTime);userList.add(user);}userMapper.batchInsert(userList);//插入数据excelReader.close();}