package com.clear.waterapi.util;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.clear.waterapi.bean.Result;
import org.springframework.beans.BeanUtils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
public class ExportExcelUtils {
public static <T> List<T> getModels(List<?> dailyList, Class<T> model) {
ArrayList<T> res = new ArrayList<>();
for (int i = 0; i < dailyList.size(); i++) {
T target = null;
try {
target = model.newInstance();
BeanUtils.copyProperties(dailyList.get(i), target);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
res.add(target);
}
return res;
}
public static void export(HttpServletResponse response, List<?> list, String fileName, Class<?> clazz,String sheetName) {
ServletOutputStream out = null;
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// ExcelWriter excelWriter = null;
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
out = response.getOutputStream();
// WriteSheet writeSheet = EasyExcel.writerSheet("城市小时").build();
EasyExcel.write(response.getOutputStream()).head(clazz).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet(sheetName).doWrite(list);
} catch (IOException e) {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Result fail = Result.fail();
try {
response.getWriter().println(JSON.toJSONString(fail));
} catch (IOException ex) {
ex.printStackTrace();
}
}
// excelWriter = EasyExcel.write(fileName, clazz).build();
// 这里注意 如果同一个sheet只要创建一次
//设置自适应宽度
// writeSheet.
// 第一个 sheet 名称
// sheet.setSheetName("sheet1");
//通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
// try {
// response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// writer.finish();
// response.setContentType("multipart/form-data");
// response.setCharacterEncoding("utf-8");
// try {
// if (out != null) {
// out.flush();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
}
public static void exportForCustomHead(List<List<String>> head,HttpServletResponse response, List<?> list, String fileName, Class<?> clazz,String sheetName) {
ServletOutputStream out = null;
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// ExcelWriter excelWriter = null;
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
out = response.getOutputStream();
// WriteSheet writeSheet = EasyExcel.writerSheet("城市小时").build();
EasyExcel.write(response.getOutputStream()).head(head).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet(sheetName).doWrite(list);
} catch (IOException e) {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Result fail = Result.fail();
try {
response.getWriter().println(JSON.toJSONString(fail));
} catch (IOException ex) {
ex.printStackTrace();
}
}
// excelWriter = EasyExcel.write(fileName, clazz).build();
// 这里注意 如果同一个sheet只要创建一次
//设置自适应宽度
// writeSheet.
// 第一个 sheet 名称
// sheet.setSheetName("sheet1");
//通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
// try {
// response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// writer.finish();
// response.setContentType("multipart/form-data");
// response.setCharacterEncoding("utf-8");
// try {
// if (out != null) {
// out.flush();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
}
public static void exportForOneOfMang(HttpServletResponse response, List<? extends BaseRowModel> list, String fileName, Class<? extends BaseRowModel> clazz, int sheetIndex, String sheetName, ExcelWriter writer) {
ServletOutputStream out = null;
try {
out = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
Sheet sheet = new Sheet(1, 0, clazz);
//设置自适应宽度
sheet.setAutoWidth(Boolean.TRUE);
// 第一个 sheet 名称
sheet.setSheetName(sheetName);
sheet.setSheetNo(sheetIndex);
writer.write(list, sheet);
//通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
//
}
public static void setResponse(HttpServletResponse response, String fileName, ExcelWriter writer){
ServletOutputStream out = null;
try {
out = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
writer.finish();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
try {
if (out != null) {
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* @Description 自己拼装表头和数据导出excel
* @param response
* @param nameforFile excel名称
* @param sheetName sheet页名称
* @param headTitles 表头
* @param data 数据
* @Return void
* @Author guoxy
* @Date 2021/6/3 14:59
**/
public static void customExport(HttpServletResponse response,String nameforFile,String sheetName,List<List<String>> headTitles,List<List<Object>> data){
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = null;
try {
fileName = URLEncoder.encode(nameforFile, "UTF-8").replaceAll("\\+", "%20");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
try {
EasyExcel.write(response.getOutputStream()).head(headTitles).sheet(sheetName).doWrite(data);
} catch (IOException e) {
e.printStackTrace();
}
}
// public static void export(HttpServletResponse response, List<? extends BaseRowModel> list, String fileName, Class<? extends BaseRowModel> clazz) {
// ServletOutputStream out = null;
// try {
// out = response.getOutputStream();
// } catch (IOException e) {
// e.printStackTrace();
// }
// ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
// Sheet sheet = new Sheet(1, 0, clazz);
// //设置自适应宽度
// sheet.setAutoWidth(Boolean.TRUE);
// // 第一个 sheet 名称
// sheet.setSheetName("sheet1");
// writer.write(list, sheet);
// //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
// try {
// response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".xlsx");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// writer.finish();
// response.setContentType("multipart/form-data");
// response.setCharacterEncoding("utf-8");
// try {
// if (out != null) {
// out.flush();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}
excel 导出
最新推荐文章于 2023-07-06 15:00:25 发布