搭建环境

导入easyExcel所需依赖

		<!--easyexcel报表导出  -->
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>easyexcel</artifactId>
		    <version>2.0.0</version>
		</dependency>

创建一个工具类

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;

import java.io.*;
import java.net.URLEncoder;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.formula.functions.T;


/**  
* <p>Title: To.java</p>

* <p>Description:添加注释 </p> 

* @author youthMing   

* @date 2020年4月23日 
 */
public class EasyExcelUtil {
	//报表导出处理
	 @SuppressWarnings({ "rawtypes", "unchecked" })
	public static void toExcle(HttpServletResponse response,List listdata,String filename,Class clazz) {
			try {
			response.setContentType("application/vnd.ms-excel");
			response.setCharacterEncoding("utf-8");
			String name = URLEncoder.encode(filename, "UTF-8");
			response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''"+name+".xlsx");
			
			//获取输出流
			ServletOutputStream outputStream= response.getOutputStream();	

			
			//获取工作簿对象
			 ExcelWriter excelWriter = EasyExcel.write(outputStream, clazz).build();
			
			 
			 //获取工作表数量
			 Integer sheetnum=1;
			 //集合大小
			 int size = listdata.size();

			//这里控制每个工作簿一百万条数据
			 if ( size <1000000) {
				 sheetnum=1;
			}else {
				sheetnum= size %1000000==0 ? size /1000000 : size /1000000+1;
			}
			 
		     // 去调用写入,这里我调用了sheetnum次,实际使用时根据数据库分页的总的页数来。这里最终会写到sheetnum个sheet里面
			 List<T> subList =null;
		      for (int i = 0; i < sheetnum; i++) {
		          // 每次都要创建writeSheet 这里注意必须指定sheetNo
		    	 WriteSheet  writeSheet = EasyExcel.writerSheet(i,filename+i).build();
		          // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
				subList = listdata.subList(i*1000000,i==sheetnum-1 ? size : (i+1)*1000000);
		        excelWriter.write(subList, writeSheet);
		      }
		      
		      
		      //finish 会帮忙关闭流
		      excelWriter.finish();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		}
}


我们将这个工具类放在项目的指定文件夹内就可以直接调用,就可以在任何需要报表导出的地方进行报表导出;

工具类的使用

这里是工具类的使用

	ToExcelUtil.toExcle(response, castEntity, usageAntibioticsForm.getExport(), GetDrugUserOfTopNVo.class);

注意事项

1、实体类需要加相应easyExcel注解(如果不加注解也可以只不过表头名字会和字段怎么相同)
在这里插入图片描述
注解还有很多例如多表头出来,行高度,列宽度等可以在easyExcel官方文档中根据自己的需要自行添加。

2、相应Controller返回值需要返回空
返回值需要为空
在相应的方法中最后响应给页面的返回值需要为空,不然代码会报错!

前端(Vue)写法

		//这一段可以直接复制这里是使用form表单提交请求:

			//使用form导出数据
			post:function(url, params) { 
				// 创建form元素
				var temp_form = document.createElement("form");
				// 设置form属性
				temp_form .action = url;
				temp_form .target = "_self";
				temp_form .method = "post";
				temp_form .style.display = "none";
				// 处理需要传递的参数 
				for (var x in params) {
				var opt = document.createElement("textarea");
				opt.name = x;
				opt.value = params[x];
				temp_form .appendChild(opt);
				}
				document.body.appendChild(temp_form);
				// 提交表单
				temp_form .submit();
			},

//这里调用上面的方法进行导出:


			//导出Excel
			export:function(){
				this.identityVerifyForm2.export = '未核实案件';
				var url= this.ExportAPI + '/FaceInpregister/GetFaceInpregisterListExport';
				this.post(url,this.identityVerifyForm2);
			},

第一次发布文章感谢支持!

Logo

前往低代码交流专区

更多推荐