文章转至 顾东城 十分感谢。地址:https://www.cnblogs.com/gudongcheng/p/8268909.html
下载jar包:
官方下载:http://poi.apache.org/download.html这里可以下载到它的最新版本和文档
maven代码
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
小提示:用maven引入依赖jar包的可能会遇到包引用不到的bug,但是maven依赖确实已经引入了,而且没有任何报错,但是只要一引用 org.apache.poi.hssf.usermodel下面的类
就会报错,报错内容为:Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook。
Jakarta POI HSSF API组件:
HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel对象,样式和格式,有以下几种常用的对象:
常用组件:
HSSFWorkbook excel的文档对象
HSSFSheet excel的表单
HSSFRow excel的行
HSSFCell excel的格子单元
HSSFFont excel字体
样式:
HSSFCellStyle cell样式
基本操作步骤:
首先,我们应该要知道的是,一个Excel文件对应一个workbook,一个workbook中有多个sheet组成,一个sheet是由多个行(row)和列(cell)组成。那么我们用poi要导出一个Excel表格
的正确顺序应该是:
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象,用行对象得到Cell对象
4、对Cell对象读写。
5、将生成的HSSFWorkbook放入HttpServletResponse中响应到前端页面
5导出Excel应用实例:
工具类代码:
package com.yq.util;
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;
public class ExcelUtil {
/**
* 导出Excel
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @param wb HSSFWorkbook对象
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){
// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if(wb == null){
wb = new HSSFWorkbook();
}
// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
//声明列对象
HSSFCell cell = null;
//创建标题
for(int i=0;i<title.length;i++){
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//创建内容
for(int i=0;i<values.length;i++){
row = sheet.createRow(i + 1);
for(int j=0;j<values[i].length;j++){
//将内容按顺序赋给对应的列对象
row.createCell(j).setCellValue(values[i][j]);
}
}
return wb;
}
}
控制器代码:
@Controller
@RequestMapping(value = "/export")
@ResponseBody
public void export(CustomerParam param, HttpServletResponse response, HttpSession session) throws Exception {
//获取数据
List<SysCustomer> list = (List<SysCustomer>) sysCustomerService.searchAllList(param);
//excel标题
String[] title = {"公司名称","联系人","联系人电话","联系人邮箱","公司详细地址","客户类别","状态","注册时间","截止日期"};
//将日期转换成"yyyy-MM-dd"格式的字符串
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );
Date d1 = new Date();
//excel文件名
String fileName = "客户信息表"+sdf1.format(d1)+".xls";//以当前日期命名
//sheet名
String sheetName = "sheet1";
String[][] content = new String[list.size()][];
for (int i = 0; i < list.size(); i++) {
content[i] = new String[title.length];
SysCustomer obj = list.get(i);
content[i][0] = obj.getCompanyname();
content[i][1] = obj.getContactname();
content[i][2] = obj.getContactphone();
content[i][3] = obj.getContactemail();
content[i][4] = obj.getContactaddress();
content[i][5] = obj.getSysCustomerTypeNames().get(0).getTypename();
if(obj.getStates().equals(1)){
content[i][6] = "有效";
}else if(obj.getStates().equals(0)){
content[i][6] = "无效";
}else{
content[i][6] = "删除";
}
content[i][7] = sdf1.format(obj.getRegisterdate());
content[i][8] = sdf1.format(obj.getExpirydate());
}
//创建HSSFWorkbook
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
//响应到客户端
try {
this.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//发送响应流方法
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
前端页面代码:
<button id="js-export" type="button" class="btn btn-primary">导出Excel</button>
------------------------------------------------------------------------------
$('#js-export').click(function(){
window.location.href="/report/exportBooksTable.do;
});