java-EasyExcel-Excel导出
java-EasyExcel-Excel导出
·
生成文件和导出文件分开操作
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
实体类中配置
然后可以直接在实体类中配置表头,@ExcelProperty()就是用来设置表头的,也可以这样写:@ExcelProperty(value=“名称”,index=索引),如果不需要某个字段,可以使用@ExcelIgnore注解忽略;此外@ExcelProperty()还有很多配置各种类型的表头,详情可以参考EasyExcel官方文档
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Author:RiverGods
* @Date:2023/4/21 16:51
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClubMember {
@ExcelProperty("主键")
private Long id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("手机号")
private String phone;
@ExcelProperty("状态")
private String status;
@ExcelProperty("创建时间")
private Date createAt;
@ExcelProperty("会员有效期起始时间")
private Date effectiveStartAt;
@ExcelProperty("会员有效期结束时间")
private Date effectiveEndAt;
}
导出:
controller
@PostMapping("/ExportExcel")
public String ExportExcel(HttpServletResponse response){
return clubMemberService.ExportExcel(response);
}
service
@Override
public String ExportExcel(HttpServletResponse response) {
List<ClubMember> clubMembers = clubMemberMapper.selectList(null);
// 设置文件导出的路径
String realPath = "F://temp/";
File folder = new File(realPath);
if (!folder.isDirectory()) {
folder.mkdirs();
}
String fileName = realPath + "会员信息表" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为用户表 然后文件流会自动关闭
EasyExcel.write(fileName, ClubMember.class).sheet("会员信息表").doWrite(clubMembers);
return fileName;
}
文件下载-controller
@GetMapping("/downloadExcel")
public void downloadExcel(String downloadPath, HttpServletRequest request, HttpServletResponse response) throws IOException {
clubMemberService.downloadExcel(downloadPath,request,response);
}
文件下载-service
@Override
public void downloadExcel(String downloadPath, HttpServletRequest request, HttpServletResponse response) throws IOException {
FileInputStream in = null;
OutputStream out = null;
try {
//获取文件名
String filename = downloadPath.substring(downloadPath.lastIndexOf("/")+1);
filename = new String(filename.getBytes("UTF-8"),"UTF-8");
String downloadpath = downloadPath;
//如果文件不存在
/*if(!file.exists()){
return false;
}*/
// 设置强制下载不打开
response.setContentType("application/force-download");
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
//读取要下载的文件,保存到文件输入流
in= new FileInputStream(downloadpath);
//创建输出流
out= response.getOutputStream();
//缓存区
byte buffer[] = new byte[1024];
int len = 0;
//循环将输入流中的内容读取到缓冲区中
while((len = in.read(buffer)) > 0){
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭
in.close();
out.close();
}
}
更多推荐
所有评论(0)