一、基本知识

1.Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

2. HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

3.POI 文档结构类

     HSSFWorkbook excel文档对象

HSSFSheet excel的sheet HSSFRow excel的行

HSSFCell excel的单元格 HSSFFont excel字体

HSSFName 名称 HSSFDataFormat 日期格式

HSSFHeader sheet头

HSSFFooter sheet尾

HSSFCellStyle cell样式

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

二、使用逻辑:

1.前端页面发起请求

2.控制器接收,并调用sql 语句查询需要导出的条件

3.调用导出excel模块工具类

1.页面请求

<script type="text/javascript">
$(function(){
//导出数据执行方法
$("#btn_print").click(function() {
location.href = "../baseExcelExport/export"
});
})
</script>

2.调用控制器

public void getExportFile(RedirectAttributes redirectAttributes,HttpServletResponse resp){

        List<BaseAssetsEquipment> list = baseAssestsEquipmentService.getExcelList();

         Map<String,String> titleMap = new LinkedHashMap<String,String>();
titleMap.put("paymentNo", "设备编号");
titleMap.put("customerNo", "设备名称"); String sheetName = "标题名";
ExportExcelUtils.excelExport(list, titleMap, sheetName, response);
}

3.导出工具类

public class ExportExcelUtils {

    /***
* 构造方法
*/
private ExportExcelUtils() { } /***
* 工作簿
*/
private static HSSFWorkbook workbook; /***
* sheet
*/
private static HSSFSheet sheet;
/***
* 标题行开始位置
*/
private static final int TITLE_START_POSITION = 0; /***
* 时间行开始位置
*/
private static final int DATEHEAD_START_POSITION = 1; /***
* 表头行开始位置
*/
private static final int HEAD_START_POSITION = 2; /***
* 文本行开始位置
*/
private static final int CONTENT_START_POSITION = 3; /**
*
* @param dataList
* 对象集合
* @param titleMap
* 表头信息(对象属性名称->要显示的标题值)[按顺序添加]
* @param sheetName
* sheet名称和表头值
*/
public static void excelExport(List<?> dataList,Map<String, String> titleMap, String sheetName,HttpServletResponse resp) { try {
String fileName = sheetName+".xls";
fileName = URLEncoder.encode(fileName, "UTF-8");
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName);
// 初始化workbook
initHSSFWorkbook(sheetName);
// 标题行
createTitleRow(titleMap, sheetName);
// 时间行
createDateHeadRow(titleMap);
// 表头行
createHeadRow(titleMap);
// 文本行
createContentRow(dataList, titleMap);
// 设置自动伸缩
// autoSizeColumn(titleMap.size());
OutputStream out = resp.getOutputStream();
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
} } /***
*
* @param sheetName
* sheetName
*/
private static void initHSSFWorkbook(String sheetName) {
workbook = new HSSFWorkbook();
sheet = workbook.createSheet(sheetName);
} /**
* 生成标题(第零行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
* @param sheetName
* sheet名称
*/
private static void createTitleRow(Map<String, String> titleMap,
String sheetName) {
CellRangeAddress titleRange = new CellRangeAddress(0, 0, 0,
titleMap.size() - 1);
sheet.addMergedRegion(titleRange);
HSSFRow titleRow = sheet.createRow(TITLE_START_POSITION);
HSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellValue(sheetName);
} /**
* 创建时间行(第一行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
*/
private static void createDateHeadRow(Map<String, String> titleMap) {
CellRangeAddress dateRange = new CellRangeAddress(1, 1, 0,
titleMap.size() - 1);
sheet.addMergedRegion(dateRange);
HSSFRow dateRow = sheet.createRow(DATEHEAD_START_POSITION);
HSSFCell dateCell = dateRow.createCell(0);
dateCell.setCellValue(new SimpleDateFormat("yyyy年MM月dd日")
.format(new Date()));
} /**
* 创建表头行(第二行创建)
*
* @param titleMap
* 对象属性名称->表头显示名称
*/
private static void createHeadRow(Map<String, String> titleMap) {
// 第1行创建
HSSFRow headRow = sheet.createRow(HEAD_START_POSITION);
int i = 0;
for (String entry : titleMap.keySet()) {
HSSFCell headCell = headRow.createCell(i);
headCell.setCellValue(titleMap.get(entry));
i++;
}
} /**
*
* @param dataList
* 对象数据集合
* @param titleMap
* 表头信息
*/
private static void createContentRow(List<?> dataList,Map<String, String> titleMap) {
try {
int i = 0;
for (Object obj : dataList) {
HSSFRow textRow = sheet.createRow(CONTENT_START_POSITION + i);
int j = 0;
for (String entry : titleMap.keySet()) { String method = "get" + entry.substring(0, 1).toUpperCase()+ entry.substring(1); Method m = obj.getClass().getMethod(method, null); String value = ""; if (m.invoke(obj, null)!=null) { value = m.invoke(obj, null).toString(); if( m.getReturnType().toString().contains("Date")){
value = DateUtils.getStringByDatefindStr(value,"EEE MMM dd HH:mm:ss Z yyyy","yyyy-MM-dd hh:mm:ss");
}
} HSSFCell textcell = textRow.createCell(j);
textcell.setCellValue(value);
j++;
}
i++;
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 自动伸缩列(如非必要,请勿打开此方法,耗内存)
*
* @param size
* 列数
*/
private static void autoSizeColumn(Integer size) {
for (int j = 0; j < size; j++) {
sheet.autoSizeColumn(j);
}
} }

完美。

欢迎关注:一只阿木木

导出excel 的方法及示例的更多相关文章

  1. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

  2. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  3. 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法

    在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...

  4. 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法

    之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...

  5. 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法

    由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...

  6. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  7. java根据xml配置文件导出excel通用方法

    java web项目中时常会用到导出功能,而导出excel几乎是每个项目必备的功能之一.针对形形色色的导出方法及个人平时的工作经验,特将导出excel方法整理成通用的方法,根据xml配置来实现特定的导 ...

  8. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  9. 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)

    假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...

随机推荐

  1. android 中List转换String,String转换List 改进版本

    原来博客地址http://blog.csdn.net/qq7342272/article/details/6830907 使用原作者贴的代码不是很好用,不能正常运行,所以我稍微改进了一下,特来分享给大 ...

  2. FFmpeg获取DirectShow设备数据(摄像头,录屏)

    这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘.本文所述的方法主要是对应Windows平台的. 1.       列设备 ffmpeg -list_devic ...

  3. Leetcode_58_Length of Last Word

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  4. STL:字符串用法详解

    字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可完成.string字符串类减少了C语言编程中三种最常见且最具破坏性的错误:超越数组 ...

  5. C++ Primer 有感(面向对象编程)

    1.除了构造函数之外,任意非static成员函数都可以是虚函数.保留字virtual只在类内部的成员函数声明处出现,不能用在类定义体外部出现的函数定义上. 2.派生类只能通过派生类对象访问其基类的pr ...

  6. 安装mysql到服务器的linux环境下

    1·安装mysql 命令:yum -y install httpd php mysql mysql-server 2·配置mysql 配置开机启动服务 /sbin/chkconfig --add my ...

  7. mongoDB常见的查询索引(三)

    1. _id索引     _id索引是绝大多数集合默认建立的索引     对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  8. (NO.00001)iOS游戏SpeedBoy Lite成形记(十一)

    之前的10篇内容主要实现了选手从起点移动至终点的动作,比较随机的模拟了选手的速度变化,另外完成了选手到达终点时该做的事情. 接下来的几篇中我们进一步完善SpeedBoy Lite项目,使它真正成为一个 ...

  9. Leetcode_169_Majority Element

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42247887 Given an array of size ...

  10. Linux 删除目录与文件

    Linux 删除目录与文件 在当前目录下查找所有.svn的目录 $ find . -type d -name ".svn" 删除当前目录下所有.svn的目录 $ find . -t ...