注意,我将一些方法抽出来放到文章末尾了,这几个方法为:

desStyle,titleStyle,celStyle

功能一.Excel单页导出,即将所有的数据导入一个sheet页

导出Excel的主方法,所需参数只需要有request和response即可,另外两个是我为了查询写入Excel数据而加入的(一个是我的service,一个是我的实体类),使用时直接复制此方法即可。

另外,其中会有一些方法,诸如getFormatDate_ymd和toUTF8String等都是一些自己写的格式数据格式的方法,这些方法取决于你的数据是否需要格式化,这些都无伤大雅,这几个方法我也在下面列出来了。:

    public static String meBespokeExportedEexecl(TsinghuaMeBespoke tsinghuaMeBespoke,HttpServletResponse response, HttpServletRequest request,TsinghuaMeBespokeService tsinghuaMeBespokeService) throws Exception {List<TsinghuaMeBespoke> tsinghuaMeBespokeList = tsinghuaMeBespokeService.findMyList(tsinghuaMeBespoke);HSSFWorkbook workBook = new HSSFWorkbook();ServletOutputStream out = null;String[] titles = {"序号", "姓名","性别", "身份证号","预约状态", "预约日期", "预约时段","体检套餐","套餐金额","实付金额","交费时间","学号","考试号","手机","院","系","生日"};CellStyle desStyle = workBook.createCellStyle();CellStyle titleStyle = workBook.createCellStyle();CellStyle celStyle = workBook.createCellStyle();titleStyle.setAlignment(CellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);CellStyle contentOddStyle = workBook.createCellStyle();contentOddStyle.setAlignment(CellStyle.ALIGN_CENTER);contentOddStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//              contentOddStyle.setWrapText(true);
//              contentOddStyle.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);contentOddStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);contentOddStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);CellStyle contentEvenStyle = workBook.createCellStyle();contentEvenStyle.setAlignment(CellStyle.ALIGN_CENTER);contentEvenStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//              contentEvenStyle.setWrapText(true);
//              contentEvenStyle.setFillForegroundColor(HSSFColor.WHITE.index);contentEvenStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);contentEvenStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);HSSFSheet sheet = workBook.createSheet("**体检人员预约信息表");Row desRow = sheet.createRow(0);// 合并单元格:参数:起始行, 终止行, 起始列, 终止列CellRangeAddress cra = new CellRangeAddress(0, 0, 0, (titles.length - 1));sheet.addMergedRegion(cra);//sheet.addMergedRegion(new Region(0, (short) 0, 0, titles.length > 0 ? (short) (titles.length - 1) : (short) 0));Cell descell = desRow.createCell(0);desRow.setHeight((short)900);descell.setCellValue("清华体检人员预约信息表");descell.setCellStyle(desStyle(workBook, desStyle));try{// 标题信息Row titleRow = sheet.createRow(1);for (int i = 0; i < titles.length; i++) {Cell cell = titleRow.createCell(i);cell.setCellValue(titles[i]);cell.setCellStyle(titleStyle(workBook, titleStyle));titleRow.setHeight((short) 600);sheet.setColumnWidth(i, 7200);}Cell cell = null;for (int j = 0; j < tsinghuaMeBespokeList.size(); j++) {TsinghuaMeBespoke m = tsinghuaMeBespokeList.get(j);Row row = sheet.createRow(j + 2);row.setHeight((short) 300);//数据设置//人名String realnamed=m.getRealname();String realname;if(realnamed!=null && !"".equals(realnamed)){realname=realnamed;}else{realname=" ";}//性别String sex=m.getSex();if("1".equals(sex)){sex="男";}else if("2".equals(sex)){sex="女";}else{sex=" ";}//身份证号String identityCardd= m.getIdentityCard();String identityCard;if(identityCardd!=null && !"".equals(identityCardd)){identityCard=identityCardd;}else{identityCard="";}//预约状态String bespokeStatus= m.getBespokeStatus();if("0".equals(bespokeStatus)){bespokeStatus="未预约";}else if("1".equals(bespokeStatus)){bespokeStatus="已预约";}else if("2".equals(bespokeStatus)){bespokeStatus="已报到";}else{bespokeStatus=" ";  //未录入}//预约日期Date bespokeDated= m.getBespokeDate();String bespokeDate="";if(bespokeDated!=null && !"".equals(bespokeDated)){bespokeDate=MyDateUtils.getFormatDate_ymd(bespokeDated);}//预约时段  开始String periodStartd=m.getPeriodStart();String periodStart="";if(periodStartd!=null && !"".equals(periodStartd)){periodStart=periodStartd;}//预约时段  结束String periodEndd=m.getPeriodEnd();String periodEnd="";if(periodEndd!=null && !"".equals(periodEndd)){periodEnd=periodEndd;}//预约时段String periodTime=periodStart+"-"+periodEnd;//体检套餐String feescaleNamed=m.getFeescaleName();String feescaleName="";if(feescaleNamed!=null && !"".equals(feescaleNamed)){feescaleName=feescaleNamed;}//套餐金额Double feescaleMoneyd=m.getFeescaleMoney();String feescaleMoney="";if(feescaleMoneyd!=null && !"".equals(feescaleNamed)){feescaleMoney=feescaleMoneyd.toString();}//实付金额Double paymentMoneyd=m.getPaymentMoney();String paymentMoney="";if(paymentMoneyd!=null && !"".equals(paymentMoneyd)){paymentMoney=paymentMoneyd.toString();}//交费时间Date paymentDated= m.getPaymentTime();String paymentDate="";if(paymentDated!=null && !"".equals(paymentDated)){paymentDate=MyDateUtils.getFormatDate_ymd(paymentDated);}//学号String studentIdd=m.getStudentId();String studentId="";if(studentIdd!=null && !"".equals(studentIdd)){studentId=studentIdd;}//考试号 EXAMINE_NUMBERString examineNumberd=m.getExamineNumber();String examineNumber="";if(examineNumberd!=null && !"".equals(examineNumberd)){examineNumber=examineNumberd;}//手机String sjd=m.getSj();String sj="";if(sjd!=null && !"".equals(sjd)){sj=sjd;}//院String departmentd=m.getDepartment();String department="";if(departmentd!=null && !"".equals(departmentd)){department=departmentd;}//系String facultyd=m.getFaculty();String faculty="";if(facultyd!=null && !"".equals(facultyd)){faculty=facultyd;}//生日Date birthDated= m.getBirthDate();String birthDate="";if(birthDated!=null && !"".equals(birthDated)){birthDate=MyDateUtils.getFormatDate_ymd(birthDated);}String[] cellContents = {String.valueOf(j + 1),realname,sex,identityCard,bespokeStatus,bespokeDate,periodTime,feescaleName,feescaleMoney,paymentMoney,paymentDate,studentId,examineNumber,sj,department,faculty,birthDate};for (int i = 0; i < cellContents.length; i++) {String content = cellContents[i];cell = row.createCell(i);cell.setCellValue(content);cell.setCellStyle(celStyle(workBook, celStyle));
//                  cell.setCellStyle(j % 2 != 0 ? contentOddStyle : contentEvenStyle);}}// 文件名StringBuffer fileName = new StringBuffer("**体检人员预约信息列表");fileName.append(MyDateUtils.getFormatDate(new Date()));fileName.append(".xls");response.setHeader("Content-disposition", "attachment;filename=" + toUTF8String(fileName.toString()));response.flushBuffer();out = response.getOutputStream();workBook.write(out);} catch (Exception e) {e.printStackTrace();} finally {try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}return null;}

几个无伤大雅的格式化的方法:

public static String toUTF8String(String s) {StringBuffer sb = new StringBuffer();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c >= 0 && c <= 255) {sb.append(c);} else {byte[] b;try {b = Character.toString(c).getBytes(StandardCharsets.UTF_8);} catch (Exception ex) {System.out.println(ex);b = new byte[0];}for (int j = 0; j < b.length; j++) {int k = b[j];if (k < 0)k += 256;sb.append("%" + Integer.toHexString(k).toUpperCase());}}}return sb.toString();}
public static String getFormatDate_ymd(Date date){String  formatStr="";if(date!=null &&!"".equals(date)){formatStr = new SimpleDateFormat("yyyy-MM-dd").format(date);}return formatStr;}

功能二.Excel导出数据为多个sheet页

之所以会导出为多个sheet页,是因为excel的单个sheet页的容量是有限的,比如:

在Excel 2003中,每个工作表有65535行和256列,而在Excel 2007以上版本中,每个工作表有1048576行和16384列。

其实很简单,我们只需要仔细调整一些循环条件即可,判断新建sheet页的情况就可以了,代码如下,我就不再多赘述了,和上面的对比一下就能了解:

    /*** 资费列表导出Excel* @param tsinghuaMeBespoke* @param response* @param request* @return* @throws Exception*/public static String meFeescaleExportedEexecl(TsinghuaMeBespoke tsinghuaMeBespoke,HttpServletResponse response, HttpServletRequest request,TsinghuaMeBespokeService tsinghuaMeBespokeService) throws Exception {List<TsinghuaMeBespoke> tsinghuaMeBespokeList = tsinghuaMeBespokeService.findFeeacleList(tsinghuaMeBespoke);HSSFWorkbook workBook = new HSSFWorkbook();ServletOutputStream out = null;String[] titles = {"序号", "姓名", "身份证号", "交费时间", "交费金额"};CellStyle desStyle = workBook.createCellStyle();CellStyle titleStyle = workBook.createCellStyle();CellStyle celStyle = workBook.createCellStyle();titleStyle.setAlignment(CellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);CellStyle contentOddStyle = workBook.createCellStyle();contentOddStyle.setAlignment(CellStyle.ALIGN_CENTER);contentOddStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//              contentOddStyle.setWrapText(true);
//              contentOddStyle.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);contentOddStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);contentOddStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);contentOddStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);CellStyle contentEvenStyle = workBook.createCellStyle();contentEvenStyle.setAlignment(CellStyle.ALIGN_CENTER);contentEvenStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//              contentEvenStyle.setWrapText(true);
//              contentEvenStyle.setFillForegroundColor(HSSFColor.WHITE.index);contentEvenStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);contentEvenStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);contentEvenStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);long sheetMax=0l;long rowEveP=3;  //每页的数据条数try{for (int sheetI = 0; sheetI< tsinghuaMeBespokeList.size(); sheetI++){if(sheetI%rowEveP==0){   //取余条件为每个分页的数据条数HSSFSheet sheet = workBook.createSheet("清华体检人员交费信息表<"+sheetMax+">");Row desRow = sheet.createRow(0);// 合并单元格:参数:起始行, 终止行, 起始列, 终止列CellRangeAddress cra = new CellRangeAddress(0, 0, 0, (titles.length - 1));sheet.addMergedRegion(cra);//sheet.addMergedRegion(new Region(0, (short) 0, 0, titles.length > 0 ? (short) (titles.length - 1) : (short) 0));Cell descell = desRow.createCell(0);desRow.setHeight((short)900);descell.setCellValue("**体检人员交费信息表<"+sheetMax+">");descell.setCellStyle(desStyle(workBook, desStyle));// 标题信息Row titleRow = sheet.createRow(1);for (int i = 0; i < titles.length; i++) {Cell cell = titleRow.createCell(i);cell.setCellValue(titles[i]);cell.setCellStyle(titleStyle(workBook, titleStyle));titleRow.setHeight((short) 600);sheet.setColumnWidth(i, 7200);}Cell cell = null;for (int j = 0; j <rowEveP; j++) {     // tsinghuaMeBespokeList.size() 此处设置每个分页多少条数据//判断是否超出数组容量if(sheetI+j<tsinghuaMeBespokeList.size()){TsinghuaMeBespoke m = tsinghuaMeBespokeList.get(sheetI+j);   //j  每个分页的每条数据Row row = sheet.createRow(j + 2);row.setHeight((short) 300);//日期格式化String paymentDate =MyDateUtils.getFormatDate_ymd(m.getPaymentTime());String[] cellContents = {String.valueOf(j + 1),m.getRealname(),m.getIdentityCard(),paymentDate,m.getPaymentMoney().toString()};for (int i = 0; i < cellContents.length; i++) {String content = cellContents[i];cell = row.createCell(i);cell.setCellValue(content);cell.setCellStyle(celStyle(workBook, celStyle));//                 cell.setCellStyle(j % 2 != 0 ? contentOddStyle : contentEvenStyle);}}}sheetMax++;}}/*原代码块位置*/// 文件名StringBuffer fileName = new StringBuffer("**体检人员交费信息列表");fileName.append(MyDateUtils.getFormatDate(new Date()));fileName.append(".xls");response.setHeader("Content-disposition", "attachment;filename=" + toUTF8String(fileName.toString()));response.flushBuffer();out = response.getOutputStream();workBook.write(out);} catch (Exception e) {e.printStackTrace();} finally {try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}return null;}

大事儿,几个抽出来的设置样式的方法(要不然代码太多不怎么好看)

 //设置public static CellStyle desStyle(HSSFWorkbook wb, CellStyle ccellStyle) {ccellStyle.setAlignment(CellStyle.ALIGN_CENTER);
//        ccellStyle.setFillForegroundColor(HSSFColor.WHITE.index);
//        style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);ccellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);ccellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//        ccellStyle.setWrapText(true);ccellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框ccellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框ccellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框ccellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框Font font = wb.createFont();font.setBoldweight(Font.BOLDWEIGHT_BOLD);//font.setColor(HSSFColor.BLACK.index);font.setFontHeight((short) 800);font.setFontHeightInPoints((short) 16);// 设置字体大小ccellStyle.setFont(font);return ccellStyle;}public static CellStyle titleStyle(HSSFWorkbook wb, CellStyle cellStyle) {cellStyle.setAlignment(CellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//        cellStyle.setWrapText(true);
//        cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
//        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);Font font = wb.createFont();font.setBoldweight(Font.BOLDWEIGHT_BOLD);
//        font.setColor(HSSFColor.BLUE.index);cellStyle.setFont(font);cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
//        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
//        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);
//        cellStyle.setBorderRight(HSSFCellStyle.BORDER_DOUBLE);
//        cellStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);return cellStyle;}public static CellStyle celStyle(HSSFWorkbook wb, CellStyle ccellStyle) {ccellStyle.setAlignment(CellStyle.ALIGN_CENTER);
//        ccellStyle.setFillForegroundColor(HSSFColor.WHITE.index);
//        style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);ccellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);ccellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//        ccellStyle.setWrapText(true);ccellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框ccellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框ccellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框ccellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框Font font = wb.createFont();
//        font.setBoldweight(Font.BOLDWEIGHT_BOLD);//font.setColor(HSSFColor.BLACK.index);font.setFontHeight((short) 1000);font.setFontHeightInPoints((short) 12);// 设置字体大小ccellStyle.setFont(font);return ccellStyle;}

Excel单页导出以及多sheet导出相关推荐

  1. EasyExcel的简单导出,多sheet导出,读Excel

    首先为文件创建相对路径 ​// 文件名String fileName = "测试表格_".concat(DateUtil.nowDateTime(Constants.DATE_TI ...

  2. excel/csv文件单页最大能存多少行呢?

    最近给一个客户导出Excel数据,数据量很大,Excel直接爆掉了.异常消息如下:This sheet is too large! Your sheet size is: 2357974, 6 Max ...

  3. sqlite 统计每张表的记录数_Excel单页式人事管理表,档案记录,自带查询统计,简单实用...

    Hello大家好,我是帮帮.今天跟大家分享一张Excel单页式人事管理表,日常档案记录,自带查询统计,简单实用. 为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家可以轻松 ...

  4. SAP ABAP EXCEL导出多个SHEET页签

    ABAP导出数据到EXCEL指定页签 . 通过如下方法指定SHEET页签. CALL METHOD OF       gv_book       'Sheets' = gv_sheet     EXP ...

  5. easyPoi单sheet与多sheet导出excel简单实用(重点:自动列宽的设置)

    导入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base< ...

  6. EasyExcel 导出数据超过 Excel 单表上限了,该怎么办???

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  7. EasyExcel导出数据超过Excel单表上限时进行分表

    解决的问题 Excel单表最多可以存储1048576条数据 如果超过这个多条数据则进行Excel分表. 分表的同时需要对数据进行分割,来保证不超过Excel最大存储条数. 实体类(测试用,非常简单) ...

  8. java多表头导出excel表格_【每日一点】1. Java如何实现导出Excel单表头或多表头

    一.背景 在后台项目中,经常会遇到将呈现的内容导出到Excel的需求,通过都是导出单个表头的Excel文件,如果存在级联关系的情况下,也就需要导出多表头的场景.今天这篇文章就是分享导出Excel单表头 ...

  9. PhpSpreadsheet 实现Excel多sheet导出

    如图 最近要做一个这样的导出,一个团长对应一个sheet,然后一键导出 使用PhpOffice\PhpSpreadsheet实现   直接上代码 /*** 多sheet的导出* @author bwy ...

  10. easyExcel导出多个sheet的excel

    easyExcel导出 导出背景 依赖 单个sheet的excel导出 定义导出模型 controller层代码 多个sheet的excel导出 所用的导出模型 controller层代码 所用到的工 ...

最新文章

  1. HTML页面加载和解析流程详细介绍
  2. 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数
  3. 关于Python 3.9,那些你不知道的事
  4. 查看windows 端口进程
  5. 中青评论:家政本科招生难,专业名字误终身?
  6. Xamarin 中Visual Studio创建项目提示错误
  7. Lombok开发指南
  8. 【笔记】多态之Override
  9. Linux学习一周初体验
  10. python练习册 每天一个小程序 第0010题
  11. python request 接口自动化设计
  12. 使用RestTemplate遇到的问题
  13. 几纳米间风云:手机摄影的制高点争夺战
  14. 数据结构视频教程 -《新东方计算机考研数据结构强化班》
  15. K8s如何在不重新打版本号的情况 更新镜像
  16. GlobalMapper20提取点位的高程信息
  17. Word 如何删除分节符?
  18. Fzu 2206 函数求解【规律】
  19. 【分隔结构】动宾分离
  20. mysql密集计算_计算密集型和IO密集型

热门文章

  1. mysql+修改字段长度语句_mysql sql语句修改字段名称,字段长度
  2. python turtle菜鸟教程_Python 基础教程
  3. Matlab------在Matlab中如何画圆
  4. android 修复工具,牛学长安卓手机修复工具(安卓手机修复助手)V2.4.0.11 免费版
  5. 大规模分布式系统架构与设计实战
  6. mysql数据库安装时的默认端口_数据库默认端口号
  7. LaTex(2021)安装教程
  8. eclipse基础环境搭建(含Tomcat、maven)
  9. 基本 SQL 之增删改查
  10. gaussian09使用教程linux,Gaussian 09 GaussView5.0使用教程.ppt