这一段时间,由于项目上线基于稳定,所以我这边在基于我们一期迭代的分支上优化一部分我们之前没有做的功能,报表导出。本身之前用的是3.5的版本,但是由于同事要写导入,写的代码只有4.1.0的版本支持,所以无奈之下,只能自己看源码把之前的工具类重写一波。下面我们来看一下实现步骤。

1.导入jar

<!-- poi  -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version>
</dependency>

2.编辑工具类

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.HSSFColorPredefined;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;public class ExportExcelUtil {/*** 创建表格标题* * @param wb*            Excel文档对象* @param sheet*            工作表对象* @param headString*            标题名称* @param col*            标题占用列数*/public static void createHeadTittle(HSSFWorkbook wb, HSSFSheet sheet, String headString, int col) {HSSFRow row = sheet.createRow(0); // 创建Excel工作表的行HSSFCell cell = row.createCell(0); // 创建Excel工作表指定行的单元格row.setHeight((short) 1000); // 设置高度
cell.setCellType(CellType.STRING); // 定义单元格为字符串类型cell.setCellValue(new HSSFRichTextString(headString));sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, col)); // 指定标题合并区域// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HorizontalAlignment.CENTER); // 指定单元格水平居中对齐cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 指定单元格垂直居中个对齐cellStyle.setWrapText(true); // 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBold(true);//设置字体为粗体font.setFontName("微软雅黑");font.setColor(HSSFColorPredefined.BLACK.getIndex());font.setFontHeightInPoints((short) 16); // 字体大小
cellStyle.setFont(font);cell.setCellStyle(cellStyle);}/*** 创建表头* * @param wb*            Excel文档对象* @param sheet*            工作表对象* @param thead*            表头内容* @param sheetWidth*            每一列宽度*/public static void createThead(HSSFWorkbook wb, HSSFSheet sheet, String[] thead, int[] sheetWidth) {HSSFRow row1 = sheet.createRow(1);row1.setHeight((short) 600);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中对齐cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中对齐cellStyle.setWrapText(true);//设置背景色灰色25%cellStyle.setFillForegroundColor(HSSFColorPredefined.GREY_25_PERCENT.getIndex()); // 设置背景色
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cellStyle.setBorderRight(BorderStyle.THIN); // 设置右边框类型cellStyle.setRightBorderColor(HSSFColorPredefined.BLACK.getIndex()); // 设置右边框颜色// 设置单元格字体HSSFFont font = wb.createFont();font.setBold(true);//设置字体为粗体font.setFontName("宋体");font.setFontHeightInPoints((short) 10);cellStyle.setFont(font);// 设置表头内容for (int i = 0; i < thead.length; i++) {HSSFCell cell1 = row1.createCell(i);cell1.setCellType(CellType.STRING);//定义单元格为字符串类型cell1.setCellValue(new HSSFRichTextString(thead[i]));cell1.setCellStyle(cellStyle);}// 设置每一列宽度for (int i = 0; i < sheetWidth.length; i++) {sheet.setColumnWidth(i, sheetWidth[i]);}}/*** 填入数据* * @param wb*            // Excel文档对象* @param sheet*            // 工作表对象* @param result*            // 表数据*/public static void createTable(HSSFWorkbook wb, HSSFSheet sheet, List<LinkedHashMap<String, String>> result) {// 定义单元格格式,添加单元格表样式,并添加到工作薄HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setWrapText(true);// 单元格字体HSSFFont font = wb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 10);cellStyle.setFont(font);cellStyle.setAlignment(HorizontalAlignment.CENTER); // 居中    // 循环插入数据for (int i = 0; i < result.size(); i++) {HSSFRow row = sheet.createRow(i + 2);row.setHeight((short) 400); // 设置高度HSSFCell cell = null;int j = 0;for (String key : (result.get(i).keySet())) {cell = row.createCell(j);cell.setCellStyle(cellStyle);cell.setCellValue(new HSSFRichTextString(result.get(i).get(key)));j++;}}}}

低版本工具类

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.apache.poi.ss.util.CellRangeAddress;public class ExportExcelUtil3 {/*** 创建表格标题* * @param wb*            Excel文档对象* @param sheet*            工作表对象* @param headString*            标题名称* @param col*            标题占用列数*/@SuppressWarnings("deprecation")public static void createHeadTittle(HSSFWorkbook wb, HSSFSheet sheet, String headString, int col) {HSSFRow row = sheet.createRow(0); // 创建Excel工作表的行HSSFCell cell = row.createCell(0); // 创建Excel工作表指定行的单元格row.setHeight((short) 1000); // 设置高度
cell.setCellType(HSSFCell.ENCODING_UTF_16); // 定义单元格为字符串类型cell.setCellValue(new HSSFRichTextString(headString));sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, col)); // 指定标题合并区域// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定单元格垂直居中个对齐cellStyle.setWrapText(true); // 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("微软雅黑");font.setFontHeightInPoints((short) 16); // 字体大小
cellStyle.setFont(font);cell.setCellStyle(cellStyle);}/*** 创建表头* * @param wb*            Excel文档对象* @param sheet*            工作表对象* @param thead*            表头内容* @param sheetWidth*            每一列宽度*/@SuppressWarnings("deprecation")public static void createThead(HSSFWorkbook wb, HSSFSheet sheet, String[] thead, int[] sheetWidth) {HSSFRow row1 = sheet.createRow(1);row1.setHeight((short) 600);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);cellStyle.setWrapText(true);cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 设置背景色
        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框类型cellStyle.setRightBorderColor(HSSFColor.BLACK.index); // 设置右边框颜色// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("宋体");font.setFontHeightInPoints((short) 10);cellStyle.setFont(font);// 设置表头内容for (int i = 0; i < thead.length; i++) {HSSFCell cell1 = row1.createCell(i);cell1.setCellType(HSSFCell.ENCODING_UTF_16);cell1.setCellValue(new HSSFRichTextString(thead[i]));cell1.setCellStyle(cellStyle);}// 设置每一列宽度for (int i = 0; i < sheetWidth.length; i++) {sheet.setColumnWidth(i, sheetWidth[i]);}}/*** 填入数据* * @param wb*            // Excel文档对象* @param sheet*            // 工作表对象* @param result*            // 表数据*/@SuppressWarnings("deprecation")public static void createTable(HSSFWorkbook wb, HSSFSheet sheet, List<LinkedHashMap<String, String>> result) {// 定义单元格格式,添加单元格表样式,并添加到工作薄HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setWrapText(true);// 单元格字体HSSFFont font = wb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 10);cellStyle.setFont(font);cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中    // 循环插入数据for (int i = 0; i < result.size(); i++) {HSSFRow row = sheet.createRow(i + 2);row.setHeight((short) 400); // 设置高度HSSFCell cell = null;int j = 0;for (String key : (result.get(i).keySet())) {cell = row.createCell(j);cell.setCellStyle(cellStyle);cell.setCellValue(new HSSFRichTextString(result.get(i).get(key)));j++;}}}public static void main(String[] args) {//测试hashmap  treemap  linkedhashmap之间的顺序/*Map<String, String>  map=new HashMap<>();System.out.println("hashmap排序");add_keyvalue(map);TreeMap<String, String>  map2=new TreeMap<>();System.out.println("treemap排序");add_keyvalue(map2);LinkedHashMap<String, String>  map3=new LinkedHashMap<>();System.out.println("linkedhash排序");add_keyvalue(map3);*/// 1.封装数据List<ExportExcelView> list = new LinkedList<>();ExportExcelView b1 = new ExportExcelView();b1.setDeclsno("201810251706470169854601");b1.setDecdt("2018-09-22");b1.setEleacno("1209394999");b1.setCustName("张三");b1.setEntName("正信广电");b1.setSaleName("郭启铭");b1.setSaleTel("17342064227");b1.setRealsumretbal("1000");b1.setDecutionFee("100");ExportExcelView b2 = new ExportExcelView();b2.setDeclsno("201810251706470176052618");b2.setDecdt("2018-09-22");b2.setEleacno("1209394999");b2.setCustName("赵四");b2.setEntName("正信广电");b2.setSaleName("郭启铭");b2.setSaleTel("17342064227");b2.setRealsumretbal("2000");b2.setDecutionFee("200");list.add(b1);list.add(b2);// 实体类转换为mapList<LinkedHashMap<String, String>> result = new ArrayList<>();LinkedHashMap<String, String> map = new LinkedHashMap<>();for (ExportExcelView e : list) {map.put("declsno", e.getDeclsno());map.put("decdt", e.getDecdt());map.put("eleacno", e.getEleacno());map.put("custName",e.getCustName());map.put("entName",e.getEntName());map.put("saleName",e.getSaleName());map.put("saleTel",e.getSaleTel());map.put("realsumretbal",e.getRealsumretbal());map.put("decutionFee",e.getDecutionFee());result.add(map);}// 2.定义变量值 创建Excel文件String fileName = "正信广电_201809代扣费用表.xls"; // 定义文件名String headString = "正信广电_201809代扣费用表"; // 定义表格标题String sheetName = "正信广电_201809代扣费用表"; // 定义工作表表名String filePath = "D:\\"; // 文件本地保存路径String[] thead = { "扣款流水", "扣款日期", "发电户号", "用户姓名", "开发商","业务员姓名","业务员手机号","扣款金额(元)", "代扣费用(元)" };int[] sheetWidth = { 7500, 4000, 3000, 3000, 4000, 3000, 5000, 5000,5000}; // 定义每一列宽度
HSSFWorkbook wb = new HSSFWorkbook(); // 创建Excel文档对象HSSFSheet sheet = wb.createSheet(sheetName); // 创建工作表// 3.生成表格// ①创建表格标题createHeadTittle(wb, sheet, headString, 8);// result.get(0).size() - 1为表格占用列数,从0开始// ②创建表头
        createThead(wb, sheet, thead, sheetWidth);// ③填入数据
        createTable(wb, sheet, result);FileOutputStream fos;try {fos = new FileOutputStream(new File(filePath + fileName));wb.write(fos);fos.close();wb.close();System.out.println("导出excel成功");} catch (FileNotFoundException ex) {ex.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}}public static void add_keyvalue(Map<String, String> map){map.put("351", "11");map.put("512", "222");map.put("853", "333");map.put("125", "333");map.put("341", "333");Iterator<String>  iterator=map.keySet().iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}}

3.测试导出

①.导出对象

import lombok.Data;@Data
public class ExportExcelView {private String declsno;private String decdt;private String eleacno;private String custName;private String entName;private String saleName;private String  saleTel;private String  realsumretbal;private String decutionFee;
}

②.写入报表

public static void main(String[] args) {// 1.封装数据List<ExportExcelView> list = new LinkedList<>();ExportExcelView b1 = new ExportExcelView();b1.setDeclsno("201810251706470169854601");b1.setDecdt("2018-09-22");b1.setEleacno("1209394999");b1.setCustName("张三");b1.setEntName("正信广电");b1.setSaleName("郭启铭");b1.setSaleTel("17342064227");b1.setRealsumretbal("1000");b1.setDecutionFee("100");ExportExcelView b2 = new ExportExcelView();b2.setDeclsno("201810251706470176052618");b2.setDecdt("2018-09-22");b2.setEleacno("1209394999");b2.setCustName("赵四");b2.setEntName("正信广电");b2.setSaleName("郭启铭");b2.setSaleTel("17342064227");b2.setRealsumretbal("2000");b2.setDecutionFee("200");list.add(b1);list.add(b2);// 实体类转换为mapList<LinkedHashMap<String, String>> result = new ArrayList<>();LinkedHashMap<String, String> map = new LinkedHashMap<>();for (ExportExcelView e : list) {map.put("declsno", e.getDeclsno());map.put("decdt", e.getDecdt());map.put("eleacno", e.getEleacno());map.put("custName",e.getCustName());map.put("entName",e.getEntName());map.put("saleName",e.getSaleName());map.put("saleTel",e.getSaleTel());map.put("realsumretbal",e.getRealsumretbal());map.put("decutionFee",e.getDecutionFee());result.add(map);}// 2.定义变量值 创建Excel文件String fileName = "正信广电_201809代扣费用表.xls"; // 定义文件名String headString = "正信广电_201809代扣费用表"; // 定义表格标题String sheetName = "正信广电_201809代扣费用表"; // 定义工作表表名String filePath = "D:\\"; // 文件本地保存路径String[] thead = { "扣款流水", "扣款日期", "发电户号", "用户姓名", "开发商","业务员姓名","业务员手机号","扣款金额(元)", "代扣费用(元)" };int[] sheetWidth = { 7500, 4000, 3000, 3000, 4000, 3000, 5000, 5000,5000}; // 定义每一列宽度
HSSFWorkbook wb = new HSSFWorkbook(); // 创建Excel文档对象HSSFSheet sheet = wb.createSheet(sheetName); // 创建工作表// 3.生成表格// ①创建表格标题createHeadTittle(wb, sheet, headString, 8);// ②创建表头
        createThead(wb, sheet, thead, sheetWidth);// ③填入数据
        createTable(wb, sheet, result);FileOutputStream fos;try {fos = new FileOutputStream(new File(filePath + fileName));wb.write(fos);fos.close();System.out.println("导出excel成功");} catch (FileNotFoundException ex) {ex.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}}

③.运行效果

④.导出并下载

/*** 输出创建的Excel* @param fileName* @param wb* @param resp*/private void respOutPutExcel(String fileName, HSSFWorkbook wb, HttpServletResponse resp) {ByteArrayOutputStream os = new ByteArrayOutputStream();BufferedInputStream bis = null;BufferedOutputStream bos = null;try {wb.write(os);System.out.println("导出excel成功");byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);// 设置response参数,可以打开下载页面
            resp.reset();resp.setContentType("application/vnd.ms-excel;charset=utf-8");resp.setHeader("Content-Disposition","attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1"));ServletOutputStream out = resp.getOutputStream();bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;// Simple read/write loop.while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (FileNotFoundException ex) {ex.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}finally {try {if (bis != null)bis.close();if (bos != null)bos.close();} catch (IOException e) {e.printStackTrace();}}}

页面写法

/*** 导出报表* @returns*/
function  exportExcel(){//这里获得一些要前台查询的数据
        这里不能用ajax的方式,用ajax方式请求,会直接输出流location.href= prefix +"/listOutPutExcel;

}

<button id="outPutExcel" type="button" class="btn btn-primary" οnclick="exportExcel()">导出</button>

转载于:https://www.cnblogs.com/haoliyou/p/11344327.html

poi报表导出4.1.0版本工具类 导出并下载相关推荐

  1. java获取excle表格对象_Java使用excel工具类导出对象功能示例

    本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.use ...

  2. 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)

    使用POI在Excel中动态生成图表工具类 使用POI在Excel中动态生成图表工具类 由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干 ...

  3. 利用hutool工具类导出Excel

    简单介绍 可以使用hutool工具类,简单的生成Excel.本质上还是使用的POI组件,只是对其进行了封装,避免开发人员重复造轮子 hutool工具类链接 maven导入 <!-- hutool ...

  4. 安卓导出Excel,txt文件工具类

    开始 安卓开发中,有时候会遇到到处文件的需求,尤其是平板上的开发,这个需求更为普遍,本文记录导出excel,txt文件的方法,并提供工具类,抛砖引玉,让大家遇到类似需求的时候,处理起来更为顺手. 导出 ...

  5. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  6. java使用POI工具类导出excel

    POI导出excel 1.导入maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId ...

  7. 关于POI导出数据的util与工具类

    // 使用前先将 FileUtil与PoiUtil两个工具类导入,再将ContractPrint导入action中,new contractprint 将三个参数传入即可 package cn.itc ...

  8. 用hutool工具类导出excel

    工作上有一个导出数据的需求,发现用hutool工具类可以非常简洁快捷的生成excel导出. 前期准备 引入hutool的依赖: <dependency><groupId>cn. ...

  9. hutool导出excel大数据_HuTool工具类使用之Excel文档的导入导出

    HuTool工具类使用之Excel文档的导入导出 前言 在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel ...

最新文章

  1. 说说进程与线程的区别与联系
  2. BeautifulSoup_第二节
  3. 推荐系统笔记(深度学习)
  4. Python-简单优先队列
  5. 容器源码解析之LinkedHashSet(六)
  6. 美图秀秀首页界面按钮设计(二)
  7. php js下拉框与文本联动,php mysql js 下拉框 二级联动
  8. P1280 尼克的任务
  9. 旧版sai笔刷_漂亮的sai笔刷大全(ps笔刷包) 简化中文版
  10. dll反编译(dll反编译工具)
  11. 单点登录系统和传统登录的区别
  12. github 乱码网页排版
  13. Windows10下安装Gromacs2020
  14. [机缘参悟-33]:眼见不一定为实,大多数时候“眼见为虚”
  15. pu是什么单位(pu革是什么材料)
  16. 计算机基础考点笔记-1
  17. Qwt开发教程(三)—Qwt常见类简介#F0222
  18. 如何在靠tiktok在三个月内快速赚到20w的?实现人生逆转
  19. 一个看着有用,但是没多大用的IDEA插件MybatisCode
  20. iPayLinks艾贝盈CEO与马中青年企业家共话数字未来

热门文章

  1. 计算机系统自带的文字处理程序,如何使用win7系统电脑的内置字符编辑程序
  2. 计算机网络—轮询访问介质访问控制
  3. bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
  4. c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
  5. jQuery Mobile中翻转拨动开关slider的data-*选项
  6. quartus仿真6:74194构建线性反馈移位寄存器计数器LFSR
  7. html表格宽度拖拽,原生js实现 拖拽改变 table表格列宽
  8. 3 编程基础 Makefile
  9. 积分兑换平台(这是一种剥削么?强烈求拍砖)
  10. Jmeter性能测试实战教程系列-搭建分布式性能测试环境(五)