java 导出文件excle

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;


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();
			}
		}
}


这是封装的excle工具 直接CV就好,需要下载alibabad的依赖 

<!--easyexcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

HttpServletResponse resp = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();

使用的时候要在请求里面获取resp  ,包是自带的不用别的依赖

	EasyExcelUtil.toExcle(resp, voList, "用户列表", AccountInfoUploadVo.class);

list就是要导出的列表 ,可以从数据库查询之后进行操作 在导出

第三个参数是导出报表的名称

第4个是映射的实体类 就是List里面存的类型

	@ExcelProperty("钱包地址")
	private String address;
	/**
	 * 帐户余额
	 */
	@ExcelIgnore
	private BigDecimal money
ExcelIgnore 这个注解是忽略导出
ExcelProperty 这个注解是导出字段的中文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值