2019独角兽企业重金招聘Python工程师标准>>>

调用代码 (最下面为工具类)

导出List<实体>:

response  为 HttpServletResponse  ,如果查出的字段全部导出的话 tmarray为null

              List<BorrowCreditCustomize> recordList =  XXXXX;//赋值//导出列表String[] keys = new String[] { "编号", "用户名","状态"};String tmarray=",creditNid,username,creditStatusName,";JxlExcelUtils.exportexcle(response, "列表", recordList, "work", keys,BorrowCreditCustomize.class,null,tmarray);return null;

导出List<实体包含实体>:

 List<AdminBorrowCreditRepayCustomize> recordList =  查出的数据赋值;//导出列表String[] keys = new String[] { "借款编号", "应还日期"};//包含的内部实体Class[] contantsClass=new Class[]{CreditRepay.class,Borrow.class};//想要的字段 全要 是nullString tmarray=",borrowNid,addip,";JxlExcelUtils.exportexcle(response, "详情列表", recordList, "work", keys,AdminBorrowCreditRepayCustomize.class,contantsClass,tmarray);return null;

导出List<Map>:

注意 Hap转换成有序的LinkedHashMap再调用,key是取查出数据最多的行

  for (int i = 0; i < list.size()-1; i++) {Object[] ss= list.get(i).keySet().toArray();Object[] vv= list.get(i+1).keySet().toArray();if(key==null){if(ss.length>=vv.length){key=ss;}else{key=vv;}}else{if(key.length<vv.length){key=vv;}}}}Map<String, String> mapParm= new HashMap<String, String>();mapParm.put("dlrs", "队列人数");mapParm.put("yhm", "用户名");mapParm.put("sfkq", "是否开启");mapParm.put("tblx", "投标类型");mapParm.put("hkfs", "还款方式");mapParm.put("tbed", "投标额度");for (int i = 0; i < key.length; i++) {if(mapParm.get(key[i])!=null){key[i]=mapParm.get(key[i]);}}JxlExcelUtils.exportexcle(response, "自投条件数据", list, "work", key,null,null,null);return null;

工具类

JxlExcelUtils.java

package com.hyjf.common.util;import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
import java.util.List;import javax.servlet.http.HttpServletResponse;import jxl.SheetSettings;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/** * jxl导出excel * @author zhouxiaoshuai * @date  2016-06-01 */
public class JxlExcelUtils {  /** * @author  * @param objData 导出内容数组 * @param sheetName 导出工作表的名称 * @param contantsClass * @param objects 导出Excel的表头数组 * @return */  public static int exportToExcel(HttpServletResponse response, List<?> objData, String sheetName,Object[] key,Class clazz, Class[] contantsClass,String tmarray) {  int flag = 0;  //声明工作簿jxl.write.WritableWorkbook  WritableWorkbook wwb;  try {  //根据传进来的file对象创建可写入的Excel工作薄  OutputStream os = response.getOutputStream();  wwb = Workbook.createWorkbook(os);  /* * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 * 代码中的"0"就是sheet1、其它的一一对应。 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 */  WritableSheet ws = wwb.createSheet(sheetName, 0);  SheetSettings ss = ws.getSettings();  ss.setVerticalFreeze(1);//冻结表头  WritableFont font1 =new WritableFont(WritableFont.createFont("微软雅黑"), 10 ,WritableFont.BOLD);  WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);  WritableCellFormat wcf = new WritableCellFormat(font1);  WritableCellFormat wcf2 = new WritableCellFormat(font2);  WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体  //创建单元格样式  //WritableCellFormat wcf = new WritableCellFormat();  //背景颜色  wcf.setBackground(jxl.format.Colour.YELLOW);  wcf.setAlignment(Alignment.CENTRE);  //平行居中  wcf.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  wcf3.setAlignment(Alignment.CENTRE);  //平行居中  wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  wcf3.setBackground(Colour.LIGHT_ORANGE);  wcf2.setAlignment(Alignment.CENTRE);  //平行居中  wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  /* * 这个是单元格内容居中显示 * 还有很多很多样式 */  wcf.setAlignment(Alignment.CENTRE);  //判断一下表头数组是否有数据  if (key != null && key.length > 0) {  int tmp=0;//循环写入表头  for (int i = 0; i < key.length; i++) {  /* * 添加单元格(Cell)内容addCell() * 添加Label对象Label() * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label * Label(i, 0, columns[i], wcf) * 其中i为列、0为行、columns[i]为数据、wcf为样式 * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 */  String str=key[i].toString();if(!str.equals("key")){if(tmp==1){ws.addCell(new Label(i-1, 0, str, wcf));}else{ws.addCell(new Label(i, 0, str, wcf));}}else{tmp=1;}}  //判断表中是否有数据  if (objData != null && objData.size() > 0) {  if (clazz!=null) {//处理list<实体>的导出try {Field[] obj=clazz.getDeclaredFields();//循环写入表中数据  for (int i = 0; i < objData.size(); i++) { //循环插值int cellcount=0;for (int j = 0; j < obj.length; j++) {if (contantsClass!=null) {int flag2=0;//如果实体里包含实体for (int j2 = 0; j2 < contantsClass.length; j2++) {if (contantsClass[j2].getName().toLowerCase().equals(obj[j].getName().toLowerCase())) {//java反射调用get方法获取对象里的值String tmpname="get"+(obj[j].getName().substring(0, 1)).toUpperCase()+obj[j].getName().substring(1,obj[j].getName().length());Object object= clazz.newInstance();object = objData.get(i);  Method m1 = clazz.getDeclaredMethod(tmpname);//内部实体Object inside= contantsClass[j2].newInstance();inside= m1.invoke(object); Field[] insideField=contantsClass[j2].getDeclaredFields();//写入内部实体的字段for (int k = 0; k < insideField.length; k++) {if (tmarray==null||tmarray.contains(","+insideField[k].getName()+",")) {String tmpname2="get"+(insideField[k].getName().substring(0, 1)).toUpperCase()+insideField[k].getName().substring(1,obj[j].getName().length());Method m2 = contantsClass[j2].getDeclaredMethod(tmpname2);Object result2= m2.invoke(inside); ws.addCell(new Label(cellcount,i+1,String.valueOf(result2))); cellcount++;}}flag2=1;}}//处理不是实体的情况if (flag2==0) {if (tmarray==null||tmarray.contains(","+obj[j].getName()+",")) {//java反射调用get方法获取对象里的值String tmpname="get"+(obj[j].getName().substring(0, 1)).toUpperCase()+obj[j].getName().substring(1,obj[j].getName().length());Object object= clazz.newInstance();object = objData.get(i);  Method m1 = clazz.getDeclaredMethod(tmpname);Object result= m1.invoke(object); ws.addCell(new Label(cellcount,i+1,String.valueOf(result)));  cellcount++;}}}else {if (tmarray==null||tmarray.contains(","+obj[j].getName()+",")) {//java反射调用get方法获取对象里的值String tmpname="get"+(obj[j].getName().substring(0, 1)).toUpperCase()+obj[j].getName().substring(1,obj[j].getName().length());Object object= clazz.newInstance();object = objData.get(i);  Method m1 = clazz.getDeclaredMethod(tmpname);Object result= m1.invoke(object); ws.addCell(new Label(cellcount,i+1,String.valueOf(result))); cellcount++;}}}}  } catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}} else {//处理list<LinkedHashMap>//循环写入表中数据  for (int i = 0; i < objData.size(); i++) {  //转换成map集合{activyName:测试功能,count:2}  LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>)objData.get(i);  //循环输出map中的子集:既列值  int j=0;  for(Object o:map.keySet()){  //ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)  ws.addCell(new Label(j,i+1,String.valueOf(map.get(o)))); j++; }  }  }}else{  flag = -1;  }  //写入Exel工作表  wwb.write();  //关闭Excel工作薄对象   wwb.close(); //关闭流  os.flush();  os.close();  os =null;  }  }catch (IllegalStateException e) {  System.err.println(e.getMessage());  }  catch (Exception ex) {  flag = 0;  ex.printStackTrace();  }  return flag;  }  /** * 下载excel * @author  * @param response * @param filename 文件名 ,如:20110808.xls * @param listData 数据源 * @param sheetName 表头名称 * @param key 列名称集合,如:{物品名称,数量,单价} * @param clazz 传入实体的class (如果list里是linkedmap则传null)* @param contantsClass 用于实体内包含实体的数组 (如果list里是linkedmap则传null,如果实体里没有包含的实体也传null)* @param tmarray 以逗号间隔要包含导出的字段 */  public static void exportexcle(HttpServletResponse response,String filename,List<?> listData,String sheetName,String[] key,Class clazz,Class[] contantsClass,String tmarray)  {  //调用上面的方法、生成Excel文件  response.setContentType("application/vnd.ms-excel");  //response.setHeader("Content-Disposition", "attachment;filename="+filename);  try {  response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1") + ".xls");  exportToExcel(response, listData, sheetName, key ,clazz,contantsClass,tmarray);  } catch (UnsupportedEncodingException e) {  e.printStackTrace();  }   }  public static String getEncoding(String str) {      String encode = "GB2312";      try {      if (str.equals(new String(str.getBytes(encode), encode))) {      String s = encode;      return s;      }      } catch (Exception exception) {      }      encode = "ISO-8859-1";      try {      if (str.equals(new String(str.getBytes(encode), encode))) {      String s1 = encode;      return s1;      }      } catch (Exception exception1) {      }      encode = "UTF-8";      try {      if (str.equals(new String(str.getBytes(encode), encode))) {      String s2 = encode;      return s2;      }      } catch (Exception exception2) {      }      encode = "GBK";      try {      if (str.equals(new String(str.getBytes(encode), encode))) {      String s3 = encode;      return s3;      }      } catch (Exception exception3) {      }      return "";      }
}  

顺带下maven的依赖

 <dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6</version></dependency>

转载于:https://my.oschina.net/angleshuai/blog/690026

封装jxl导出不同数据类型的excel相关推荐

  1. 简单封装POI导出excel

    简单封装POI导出excel Apache POI是一套根据Office Open XML标准(OOXML)和Microsoft OLE 2复合文档格式(OLE2)来处理各种文件格式的Java API ...

  2. java jxl导出excel小结

    废话不多说,先上代码: package cn.com.jsoft.utils;import java.io.OutputStream; import java.io.UnsupportedEncodi ...

  3. JXL导出Excel内容为空

    前天,朋友问了我一个问题,jxl导出Excel为什么内容为空,刚开始觉得没有那么难得,结果花了一早上也没解决,第二天知道真相的我,眼泪掉下来. 现在写下代码吧,看看大家能不能找到 /* 报表导出* @ ...

  4. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

  5. python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  6. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  7. java 导出excel教程,[Java教程]导出大量数据到Excel的一种方式

    [Java教程]导出大量数据到Excel的一种方式 0 2012-07-09 17:00:11 在Java Web开发中,经常需要导出大量的数据到Excel,使用POI.JXL直接生成Excel,很容 ...

  8. 使用easy excel导出复杂表头的excel

    使用easy-excel导出复杂表头的excel 今天想写一个双层表头的excel导出,一开始使用的是poi来画发现太麻烦, 于是就想到了使用easy-excel的模板填充来实现,将导出写成了一个简单 ...

  9. JDK17-SpringBoot3.0 easyExcel导出封装公共导出方法

    当前系统环境JDK17 SpringBoot3.0 一.引入依赖 <dependency><groupId>com.alibaba</groupId><art ...

  10. mysql导出长数字到excel避免显示为科学记数法 解决方法

    mysql导出长数字到excel避免显示为科学记数法 解决方法 参考文章: (1)mysql导出长数字到excel避免显示为科学记数法 解决方法 (2)http://www.cnblogs.com/z ...

最新文章

  1. python中map()函数使用方法
  2. Zynq7000术语PL,PS,APU,SCU介绍
  3. 基于c语言的linux嵌入式开发入门
  4. 超大规模数据集类的创建
  5. php 获取 flv 部分视频,php – 获取flv视频长度
  6. Centos6.5使用yum安装mysql——快速上手必备
  7. mac iterm 怎么搜索不能输入_Mac高效开发之iTerm2、Prezto和Solarized主题
  8. SQL Profile (总结4)--使用演示示例
  9. idea断点调试继续执行快捷键(keymap设置了eclipse)
  10. animation-fill-mode属性的理解
  11. Python语言程序设计 测验6: 组合数据类型 (第3周)
  12. 还有什么服务器有无限连击,无限元宝动作类变态服有哪些
  13. Java=微信支付详解与日志记录详解
  14. Dev C++ 下载地址和安装教程
  15. google play连接超时_Google框架一键安装
  16. golang源代码阅读--Negroni
  17. Android实现动态贴纸,Android开发之仿微博贴纸效果实现——进阶篇
  18. Latex Zotero导出格式化Bibtex条目
  19. matlab pi表示,matlab中pi是什么意思
  20. 石油化工智能巡检机器人 巡检管理工作规范化、科学化

热门文章

  1. PHP 动态获取数组索引的值
  2. java 线程 数量_Java线程数量随时间增长的原因
  3. 混合蛙跳算法Matlab代码
  4. 压缩感知中常用的待还原信号种类
  5. 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
  6. 编程基本功:要建立测试基准
  7. /usr/include/glib-2.0/glib/gtypes.h:32:10: fatal error: glibconfig.h: No such file or directory
  8. python-devel找不到,可以试试python-dev
  9. LINUX不能恢复式安装
  10. 一个H264流,保存成多个文件需要注意的两个问题