easy excel 导入导出(easyexcel导入导出隐藏列)

  本篇文章为你整理了easy excel 导入导出(easyexcel导入导出隐藏列)的详细内容,包含有easyexcel导入导出工具类封装 easyexcel导入导出隐藏列 easyexcel导入大量数据 easyexcel导出word easy excel 导入导出,希望能帮助你了解 easy excel 导入导出。

  第一步:导入依赖

  

 dependency 
 groupId com.alibaba /groupId 
 artifactId easyexcel /artifactId 
 version 3.1.0 /version 
 /dependency 
第二步:创建导入导出工具类

 

  

public class ExcelUtil {
 /**
 * 导出数据为excel文件
 *
 * @param filename 文件名称
 * @param sheetName sheet名称
 * @param dataResult 集合内的bean对象类型要与clazz参数一致
 * @param clazz 集合内的bean对象类型要与clazz参数一致
 * @param response HttpServlet响应对象
 */
//有实体对象的导出方式
 public static void export(String filename,String sheetName, List ? dataResult, Class ? clazz, HttpServletResponse response) {
 response.setStatus(200);
 response.setContentType("application/vnd.ms-excel");
 response.setCharacterEncoding("utf-8");
 OutputStream outputStream = null;
 ExcelWriter excelWriter = null;
 try {
 if (StringUtil.isEmpty(filename)) {
 throw new RuntimeException("filename 不能为空");
 }
 String fileName = filename.concat(".xls");
 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
 outputStream = response.getOutputStream();
 // 根据不同的策略生成不同的ExcelWriter对象
 if (dataResult == null){
 excelWriter = getTemplateExcelWriter(outputStream);
 } else {
 excelWriter = getExportExcelWriter(outputStream);
 }
 //获取表头个数
 int last = clazz.getDeclaredFields().length;
 WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).head(clazz)
 .relativeHeadRowIndex(1)
 .registerWriteHandler(new MonthSheetWriteHandler(sheetName,last))//设置大标题名称及其单元格合并
 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())//自适应列宽
 .build();
 // 写出数据
 excelWriter.write(dataResult,writeSheet);
 } catch (Exception e) {
 log.error("导出excel数据异常:", e);
 throw new RuntimeException(e);
 } finally {
 if (excelWriter != null) {
 excelWriter.finish();
 }
 if (outputStream != null) {
 try {
 outputStream.flush();
 outputStream.close();
 } catch (IOException e) {
 log.error("导出数据关闭流异常", e);
 }
 }
 }
 }
//没有实体对象的导出方式
 public static void export(String filename,String sheetName,String headName, List ? dataResult, List List String head, HttpServletResponse response) {
 response.setStatus(200);
 response.setContentType("application/vnd.ms-excel");
 response.setCharacterEncoding("utf-8");
 OutputStream outputStream = null;
 ExcelWriter excelWriter = null;
 try {
 if (StringUtil.isEmpty(filename)) {
 throw new RuntimeException("filename 不能为空");
 }
 String fileName = filename.concat(".xls");
 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
 outputStream = response.getOutputStream();
 // 根据不同的策略生成不同的ExcelWriter对象
 if (dataResult == null){
 excelWriter = getTemplateExcelWriter(outputStream);
 } else {
 excelWriter = getExportExcelWriter(outputStream);
 }
 WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).head(head)
 .relativeHeadRowIndex(1)
 .registerWriteHandler(new MonthSheetWriteHandler(headName,head.size()))//设置大标题名称及其单元格合并
 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())//自适应列宽
 .build();
 // 写出数据
 excelWriter.write(dataResult,writeSheet);
 } catch (Exception e) {
 log.error("导出excel数据异常:", e);
 throw new RuntimeException(e);
 } finally {
 if (excelWriter != null) {
 excelWriter.finish();
 }
 if (outputStream != null) {
 try {
 outputStream.flush();
 outputStream.close();
 } catch (IOException e) {
 log.error("导出数据关闭流异常", e);
 }
 }
 }
 }
 /**
 * 根据不同策略生成不同的ExcelWriter对象, 可根据实际情况修改
 * @param outputStream 数据输出流
 * @return 模板下载ExcelWriter对象
 */
 private static ExcelWriter getTemplateExcelWriter(OutputStream outputStream){
 return EasyExcel.write(outputStream)
 //.registerWriteHandler(new CommentWriteHandler()) //增加批注策略
 //.registerWriteHandler(new CustomSheetWriteHandler()) //增加下拉框策略
 .registerWriteHandler(getStyleStrategy()) //字体居中策略
 .build();
 }
 /**
 * 根据不同策略生成不同的ExcelWriter对象, 可根据实际情况修改
 * @param outputStream 数据输出流
 * @return 数据导出ExcelWriter对象
 */
 private static ExcelWriter getExportExcelWriter(OutputStream outputStream){
 return EasyExcel.write(outputStream)
 .registerWriteHandler(getStyleStrategy()) //字体居中策略
 .build();
 }
 /**
 * 设置表格内容居中显示策略
 * @return
 */
 private static HorizontalCellStyleStrategy getStyleStrategy(){
 WriteCellStyle headWriteCellStyle = new WriteCellStyle();
 headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.index);
 //设置头字体
 WriteFont headWriteFont = new WriteFont();
 headWriteFont.setFontHeightInPoints((short)10);
 headWriteFont.setBold(true);
 headWriteCellStyle.setWriteFont(headWriteFont);
 headWriteFont.setFontName("宋体");
 //设置头居中
 headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
 // 内容策略
 WriteCellStyle writeCellStyle = new WriteCellStyle();
 // 设置内容水平居中
 writeCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
 //垂直居中,水平居中
 writeCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 writeCellStyle.setBorderLeft(BorderStyle.THIN);
 writeCellStyle.setBorderTop(BorderStyle.THIN);
 writeCellStyle.setBorderRight(BorderStyle.THIN);
 writeCellStyle.setBorderBottom(BorderStyle.THIN);
 writeCellStyle.setWriteFont(headWriteFont);
 //设置 自动换行
 //contentWriteCellStyle.setWrapped(true);
 return new HorizontalCellStyleStrategy(headWriteCellStyle, writeCellStyle);
 }
 /**
 * 根据Excel模板,批量导入数据
 * @param file 导入的Excel
 * @param clazz 解析的类型
 * @return 解析完成的数据
 */
 public static List ? importExcel(MultipartFile file, Class ? clazz){
 if (file == null file.isEmpty()){
 throw new RuntimeException("没有文件或者文件内容为空!");
 }
 List Object dataList = null;
 BufferedInputStream ipt = null;
 try {
 InputStream is = file.getInputStream();
 // 用缓冲流对数据流进行包装
 ipt = new BufferedInputStream(is);
 // 数据解析监听器
 ExcelListener listener = new ExcelListener();
 // 读取数据
 EasyExcel.read(ipt, clazz,listener).headRowNumber(2).sheet().doRead();
 // 获取去读完成之后的数据
 dataList = listener.getDatas();
 } catch (Exception e){
 log.error(String.valueOf(e));
 throw new RuntimeException("数据导入失败!" + e);
 }
 return dataList;
 }
}
第三步:表格头部设置

 

  

public class MonthSheetWriteHandler implements SheetWriteHandler {
 private String titleName="";
 private int last=0;
 public MonthSheetWriteHandler(String titleName,int last){
 this.titleName=titleName;
 this.last=last;
 }
 @Override
 public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
 Workbook workbook = writeWorkbookHolder.getWorkbook();
 Sheet sheet = workbook.getSheetAt(0);
 Row row1 = sheet.createRow(0);
 row1.setHeight((short) 800);
 Cell cell = row1.createCell(0);
 //设置标题
 cell.setCellValue(titleName+"表");
 CellStyle cellStyle = workbook.createCellStyle();
 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 cellStyle.setAlignment(HorizontalAlignment.CENTER);
 Font font = workbook.createFont();
 font.setBold(true);
 font.setFontHeight((short) 400);
 font.setFontName("宋体");
 cellStyle.setFont(font);
 cell.setCellStyle(cellStyle);
 sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, last));
 }
}
第四步:创建导入的监听器

 

  

public class ExcelListener extends AnalysisEventListener {
 //可以通过实例获取该值
 private List Object datas = new ArrayList ();
 @Override
 public void invoke(Object o, AnalysisContext analysisContext) {
 datas.add(o);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
 doSomething(o);//根据自己业务做处理
 }
 private void doSomething(Object object) {
 //1、入库调用接口
 }
 public List Object getDatas() {
 return datas;
 }
 public void setDatas(List Object datas) {
 this.datas = datas;
 }
 public void doAfterAllAnalysed(AnalysisContext analysisContext) {
 // datas.clear();//解析结束销毁不用的资源
 }
}
第五步:service层调用导入导出方法
//导出
/**

 

  

fileName:文件名称

 

  

sheetName:sheet名称

 

  

exportList:数据源
HouseExportVO.class:实体类对象,与数据源对应
response:HttpServlet响应对象

 

  

*/

 

  

//ExcelUtil.export(fileName,sheetName,exportList, HouseExportVO.class, response); 有实体类对象的调用方式
/**

 

  

fileName:文件名称

 

  

sheetName:sheet名称

 

  

headName:头部标题名称

 

  

dataList:数据源组装

 

  

headList:动态头部列组装

 

  

response:HttpServlet响应对象

 

  


*/

 

  

//ExcelUtil.export(fileName,sheetName,headName,dataList, headList, response);动态列调用方式
//导入

 

  

//读取文件,获取数据
/**

 

  

multipartFile:导入的文件,由前端传入

 

  

HouseImportExcelDTO.class:接受数据所对应的实体对象

 

  

读取到的数据源:excelData

 

  

*/
//List ? excelData = ExcelUtil.importExcel(multipartFile, HouseImportExcelDTO.class);
自此通用的easyExcel导入导出就完成了,具体导出的表格样式自行设置!

 

  以上就是easy excel 导入导出(easyexcel导入导出隐藏列)的详细内容,想要了解更多 easy excel 导入导出的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: