JAVA公共导出Excel_Java实现导出Excel

Java实现导出Excel

Java实现导出Excel

??POI:是对所有office资源进行读写的一套工具包、属于apache开源组织。

poi操作excel:

poi是把整个文件的属性都封装在HSSFWorkbook 中;

通过HSSFWorkbook来操作单个工作薄。然后通过工作薄来操作行;

在通过行来操控单元格。这样一级一级的分拆下来;

HSSFWorkbook---->HSSFSheet----->HSSFRow---->HSSFCell;

??由于是基于HSSFWorkbook对象一步步创建起来的,所以不用把创建好的单元格添加进这个对象中;如果需要对部分表格进行设置样式什么的,就可以创立HSSFCellStyle对象来进行设定样式。

参考属性:

98c81084f8bcfe0595681c0ed68706ad.png

实现思路:

??当一点击导出按钮就跳转到指定的Controller去执行对应方法,先调用dao对数据库数据进行查询,根据dao层的方法返回一个集合对象,然后把这个集合对象的数据交互给POI去动态生成单元格并设置进去。项目后端我用的是SSM框架搭建项目,所以逻辑代码我写在Controller类中。直接看以下代码示例:

基本操作步骤

首先,需要引入jar(这里以SSM项目为例,在pom.xml配置文件中配置)

org.apache.poi

poi

4.1.2

org.apache.poi

poi-ooxml

4.1.2

org.apache.poi

poi-scratchpad

4.1.2

然后理解一下一个Excel的文件的组织形式

??一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。

27dce3838c3db2946916133deee542bb.png

/**

* 导出Excel

*

* @param response

* @param session

*/

@SuppressWarnings("unchecked")

@ResponseBody

@RequestMapping("/exportToExcel")

public void exportToExcel(HttpServletResponse response, HttpSession session) {

Map filedNames = new LinkedHashMap();

String titleName = "";

Class> objClass = null;

Object obj = null;

try {

List listFault = (List) session.getAttribute("listFault");

if (listFault != null) {

// 声明一个list集合接收Dao层查询所返回来的值

obj = listFault;

// excel标题和字段

filedNames.put("dtc", "故障码\r\nDTC");

filedNames.put("hexDtc", "故障码\r\n(hex)");

filedNames.put("englishDescription", "故障码英文描述\r\nEnglish description");

filedNames.put("chineseDescription", "故障码中文描述\r\nChinese description");

filedNames.put("operatingConditions", "故障码运行条件\r\nDTC operating conditions");

filedNames.put("settingConditions", "故障码设置条件\r\nDTC setting conditions");

filedNames.put("settingAfterConditions", "故障码设置时发生的操作\r\nStrategy after DTC appears");

filedNames.put("restoreConditions", "故障恢复条件\r\nDTC resume conditions");

filedNames.put("activateMilRegulations", "激近故障灯原则\r\nActivate MIL regulations");

filedNames.put("milOffRegulations", "熄灭故障灯原则\r\nMil Off regulations");

filedNames.put("clearConditions", "清除故障码条件\r\nClear fault information conditions");

titleName = "故障码信息表";

objClass = FaultCodeVo.class;

// 调用ExcelResponseUtil

ExcelResponseUtil.exportToExcel(response, obj, filedNames, titleName, objClass);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

package com.gx.util;

import java.io.OutputStream;

import java.lang.reflect.Method;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

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.ss.usermodel.HorizontalAlignment;

@SuppressWarnings("all")

public class ExcelResponseUtil {

/**

* 导出Excel

*

* @param response

* @param list 导出数据集合

* @param filedNames excel标题&字段 此参数为map,实例为new LinkedHashMap();

* @param titleName 导出文件名

* @param objClass 实体类字节码.class

*/

public static void exportToExcel(HttpServletResponse response, Object list, Map filedNames,

String titleName, Class> objClass) {

// 第一步,创建一个webbook,对应一个Excel文件

HSSFWorkbook wb = new HSSFWorkbook();

// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

HSSFSheet sheet = wb.createSheet(titleName);

// 设置列宽(如果不是很严谨的需要,或者其他地方共用次util类,可以不设置)

sheet.setColumnWidth(0, 10 * 256);

sheet.setColumnWidth(1, 10 * 256);

sheet.setColumnWidth(2, 36 * 256);

sheet.setColumnWidth(3, 36 * 256);

sheet.setColumnWidth(4, 36 * 256);

sheet.setColumnWidth(5, 36 * 256);

sheet.setColumnWidth(6, 36 * 256);

sheet.setColumnWidth(7, 36 * 256);

sheet.setColumnWidth(8, 36 * 256);

sheet.setColumnWidth(9, 36 * 256);

sheet.setColumnWidth(10, 80 * 256);

// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

HSSFRow row = sheet.createRow(0);

// 第四步,创建单元格,并设置值表头设置表头居中

HSSFCellStyle style = wb.createCellStyle();

style.setWrapText(true);

style.setAlignment(HorizontalAlignment.CENTER);

// 声明列对象

HSSFCell cell = null;

Set fileds = filedNames.keySet();

try {

int i = 0;

// 创建标题

for (String filed : fileds) {

cell = row.createCell(i);

cell.setCellValue(filedNames.get(filed).toString());

cell.setCellStyle(style);

i++;

}

if (list instanceof List) {

List lists = (List) list;

for (int j = 0; j < lists.size(); j++) {

Object obj = objClass.newInstance();// 获取对象实例

row = sheet.createRow(j + 1);

obj = lists.get(j);// 获取一条数据

int k = 0;

for (String filed : fileds) {

String firstBig = filed.substring(0, 1).toUpperCase() + filed.substring(1);

// ---获取getter方法,创建内容

Method getMethod = objClass.getMethod("get" + firstBig);

row.createCell(k).setCellValue(getMethod.invoke(obj).toString());

row.getCell(k).setCellStyle(style);

k++;

}

}

}

String fileName = "";// 文件名

// 输出的文件名+以毫秒为单位返回当前时间

fileName = new String((titleName + System.currentTimeMillis() + ".xls").getBytes(), "ISO8859-1");// ISO8859-1不能改为UTF-8,否则文件名是乱码

response.setContentType("application/octet-stream;charset=ISO8859-1");// application应用;octet-stream八进制;charset字符集(请求应用)

response.setHeader("Content-Disposition", "attachment;filename=" + fileName);// Content-Disposition内容配置;attachment附件;(下载完成提示)

OutputStream os = response.getOutputStream();

wb.write(os);

os.flush();

os.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

备注:

Dao层和Service层和你平时写查询一样,无需添加什么。

页面请求时使用window.open(“URL”);

Java实现导出Excel相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值