调用方法

//表头
String[] headers = {  "项目ID","贷款名称","借款人ID","用户名","借款人名称/企业名称","信用等级","客服id","客服名称","年利率","借款期限","借款期限类型","申请日期","成标日期","借款状态","最后修改时间","创建日期"};
//数据键名或者MODEL类字段名
String[] Col = {"tasklogId","loanName","custId","userName","realName","creditGrade","serviceId","serviceName","profitInterest","loanDeadline","loanDeadlineType","createTime","finishTime","status","updateTime","createTime"};ExportExcel<P2pLoanTasklog> ex = new ExportExcel<P2pLoanTasklog>();
//这是model类型的数据  写的例子  暂时不添加数据
List<P2pLoanTasklog> excelList  = new ArrayList<P2pLoanTasklog>();
//生成Excel
HSSFWorkbook workbook = ex.exportExcel("sheet1", headers,Col, excelList,null);
//下载
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + exportExcelFileName);
OutputStream ouputStream = response.getOutputStream();
workbook.write(ouputStream);
ouputStream.flush();
ouputStream.close();  

ExportExcel 导出EXCEL类

package com.hjzx.common.util;import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class ExportExcel<T> {private static final Logger logger = LoggerFactory.getLogger(ExportExcel.class);/** *  * @param title *            表格标题名 * @param headers *            表格属性列名数组 (第一行标题)* @param Col *            需要显示的表格属性列名数组 如果是javabean 必须和字段名字一直 如果为Map 必须为Map的key名字对应* @param dataset *            需要显示的数据集合,集合泛型支持两种,1:符合javabean风格的类的对象 2:Map类型。此方法支持的 *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * @param pattern *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */  public HSSFWorkbook exportExcel(String title, String[] headers,String[] Col,Collection<T> dataset, String pattern) {if(pattern == null || pattern.equals("")) pattern = "yyy-MM-dd";// 声明一个工作薄HSSFWorkbook workbook = new HSSFWorkbook();// 生成一个表格HSSFSheet sheet = workbook.createSheet(title);// 设置表格默认列宽度为15个字节sheet.setDefaultColumnWidth(15);// 生成一个样式HSSFCellStyle style = workbook.createCellStyle();// 设置这些样式style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 生成一个字体HSSFFont font = workbook.createFont();font.setColor(HSSFColor.VIOLET.index);font.setFontHeightInPoints((short) 12);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 把字体应用到当前的样式style.setFont(font);// 生成并设置另一个样式HSSFCellStyle style2 = workbook.createCellStyle();style2.setFillForegroundColor(HSSFColor.WHITE.index);style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);style2.setBorderRight(HSSFCellStyle.BORDER_THIN);style2.setBorderTop(HSSFCellStyle.BORDER_THIN);style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 生成另一个字体HSSFFont font2 = workbook.createFont();font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 把字体应用到当前的样式style2.setFont(font2);// 声明一个画图的顶级管理器HSSFPatriarch patriarch = sheet.createDrawingPatriarch();// 产生表格标题行HSSFRow row = sheet.createRow(0);int Cell = 0;for (short i = 0; i < headers.length; i++) {HSSFCell cell = row.createCell(Cell);cell.setCellStyle(style);HSSFRichTextString text = new HSSFRichTextString(headers[i]);cell.setCellValue(text);Cell ++ ;}// 遍历集合数据,产生数据行Iterator<T> it = dataset.iterator();int index = 0;while (it.hasNext()) {index++;row = sheet.createRow(index);T t = (T) it.next();String[] fields = Col;Cell = 0;for (short i = 0; i < fields.length; i++) {String fieldName = fields[i];HSSFCell cell = row.createCell(Cell);cell.setCellStyle(style2);try {Object value = "";Class tCls = null;Map map = null;if(t instanceof Map){map = (Map)t;value = map.get(fieldName);} else {String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);tCls = t.getClass();Method getMethod = tCls.getMethod(getMethodName,new Class[] {});value = getMethod.invoke(t, new Object[] {});}if(value == null ) value = "";// 判断值的类型后进行强制类型转换String textValue = null;if (value instanceof Date) {Date date = (Date) value;SimpleDateFormat sdf = new SimpleDateFormat(pattern);textValue = sdf.format(date);} else if (value instanceof byte[]) {// 有图片时,设置行高为60px;row.setHeightInPoints(60);// 设置图片所在列宽度为80px,注意这里单位的一个换算sheet.setColumnWidth(Cell, (short) (35.7 * 80));// sheet.autoSizeColumn(i);byte[] bsValue = (byte[]) value;HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,1023, 255, (short) 6, index, (short) 6, index);anchor.setAnchorType(2);patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));} else {// 其它数据类型都当作字符串简单处理textValue = value.toString();}// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成if (textValue != null) {Pattern p = Pattern.compile("^//d+(//.//d+)?$");Matcher matcher = p.matcher(textValue);if (matcher.matches()) {// 是数字当作double处理cell.setCellValue(Double.parseDouble(textValue));} else {HSSFRichTextString richString = new HSSFRichTextString(textValue);HSSFFont font3 = workbook.createFont();font3.setColor(HSSFColor.BLUE.index);richString.applyFont(font3);cell.setCellValue(richString);}}Cell ++ ;} catch (Exception e) {e.printStackTrace();}}}return workbook;}
}

大神有好的建议可以交流一下

JAVA POI Excel导出,数据源可以是ListMap或者ListModel类型相关推荐

  1. java poi excel导出

    直接上代码 0. pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypo ...

  2. java poi excel导出2003版改成2007版本的时候报错

    03版本: HSSFWorkbook book =new HSSFWorkbook();---并无报错 07版本: XSSFWorkbook book =new XSSFWorkbook(); 报错内 ...

  3. Java POI Excel导入导出

    Java POI Excel导入导出 1.maven引入依赖 2.导入Excel 3.导出Excel 1.maven引入依赖 <!-- POI Excel 操作 --> <depen ...

  4. java实现excel导出合并单元格

    随着数据的不断增长,很多时候需要将数据导出到Excel中进行分析.处理和展示.而Java作为一种流行的编程语言,自然也提供了很多实现Excel导出的方法.本文将介绍如何使用Java实现Excel导出, ...

  5. java poi pdf 导出

    java poi pdf 导出 (java poi pdf导出 文字+图片两张放置一行) 思路:流传入图片 ,pdf没有行的概念,只有列即为一行,两张图片可以先建立一列在一列总再建立两列各放置一张图片 ...

  6. java中Excel导出echart图片

    java中Excel导出echart图片 1.在生成echart的前端代码生成图片代码后Echart.setOption(captestRcapEchartOption, true);后面加上以下代码 ...

  7. java poi word导出

    java poi word导出 (含有文字,图像) 导出word效果如下: 思路:建立预期导出word效果,设置为模板,然后填充对应信息,注意,加粗,居中等一些图片,文字格式预先设置好.然后进行文字或 ...

  8. Java POI Excel移动行和复制行的处理

    目录 Java POI Excel移动行和复制行的处理 坑点: 实现的代码 Java POI Excel移动行和复制行的处理 POI操作Excel时,不支持移动行的操作,因此在需要通过复制行+删除行+ ...

  9. java - poi递归导出树结构Excel,导入树结构Excel,树结构递归查询,新增,修改,删除

    工作中设计树结构增删改查,导入,导出操作,搜索 POI导入导出树结构Excle 相关博客较少,故写博客用以记录分享. 文章目录 一.表结构设计,导入导出模板. 二.递归查询树结构 1.思路如下 2.代 ...

  10. Java POI导入/导出(规则/非规则)excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

最新文章

  1. -bash:syntax error near unexpected token '('
  2. 如何优雅的使用和理解线程池
  3. 一个NODE_ENV 引发的血案
  4. mysql select 缓存_mysql select缓存机制使用详解
  5. 【机器学习基础】kaggle竞赛中数据抽样方式
  6. 支付宝客户端架构分析:自动化日志收集及分析
  7. 二级域名是否可以随意设定_新老域名是否影响SEO优化收录排名?企业需要多域名做网站吗?...
  8. RT-Thread移植
  9. ElasticSearch最全详细使用教程:入门、索引管理、映射详解
  10. GET 和 POST的区别(转载)
  11. SilverLight客户端搭建完善聊天室 测试网址swkzy.vicp.net
  12. 恢复出厂设置后itms注册失败_手机恢复出厂设置后,与新手机的区别已被确认,望大家相互转告!...
  13. Linux内核同步机制--自旋锁【转】
  14. 使用vue-print-nb插件页面空白以及打印没有样式问题
  15. android小应用帮美女更衣系列一(附源码)
  16. html 还原键盘默认事件,js阻止默认事件 (两种方法)及键盘事件onkeydown 、 onkeypress 、onkeyup实例讲解...
  17. 星淘惠:我国在国际大变革中迎来国际贸易的发展黄金时期
  18. echarts实现复合饼图
  19. android室内地图,室内位置-与地图交互-开发指南-Android 室内地图SDK | 高德地图API...
  20. c语言子程序返回指令,十八、使用call和ret指令实现子程序的调用和返回

热门文章

  1. 用python计算化学题_(完整版)化学计算题解题方法(含答案)
  2. 气球java游戏_团队游戏 气球
  3. win10无法装载iso文件_win10专业版系统无法加载iso文件怎么办
  4. 人工智能辅助服装设计 | Mixlab论文带读
  5. OSChina 周一乱弹 —— 原来我的名字还有这么美的一个故事
  6. 企业u盘系统服务器,服务器u盘装系统
  7. 京津冀地区地貌类型空间分布数据
  8. 一、什么是统一社会信用代码
  9. adventure项目案例分析
  10. 单元测试,我有话说(No tests to run. No tests were executed)