action类的方法:
<pre name="code" class="java"><span style="white-space:pre"> </span>//注入代理对象
@Resource
private UserService userService;
//excel导出 用户列表(页面不需要跳转 所以不要返回值)
public void exportExcel() {
try {
//获取response输出流
HttpServletResponse response = ServletActionContext.getResponse();
//字节流
ServletOutputStream out = response.getOutputStream();
//设置response响应头
response.setHeader("Content-disposition", "attachment;fileName="+URLEncoder.encode("用户列表.xls","UTF-8"));
//查询全部
list= userService.findAll();
//调用service,创建一个方法,导出=下载
userService.exportExcel(list,out);
} catch (Exception e) {
e.printStackTrace();
}
}
业务逻辑处理写在service层,调用了service两个方法:<pre name="code" class="java">userService.findAll();<pre name="code" class="java">userService.exportExcel(list,out);
接口类:
<pre name="code" class="java"><span style="white-space:pre"> </span>/**
* 导出excel
* @param list 数据集合
* @param out 输出流
*/
void exportExcel(List<User> list, OutputStream out);
<span style="white-space:pre"> </span><pre name="code" class="java"><span style="white-space:pre"> </span>/**
* 查找全部
* @return 返回一个list集合
*/
public List<T> findAll();
实现类:<pre name="code" class="java">import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Service;
<span style="white-space:pre"> </span>@Override
public void exportExcel(List<User> list, OutputStream out) {
// 工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = workbook.createSheet("用户列表");
// 设置默认的列宽
sheet.setDefaultColumnWidth(15);
// 生成第一行
// 合并单元格(7列)
CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 6);
sheet.addMergedRegion(cra);// 合并单元格
// 合并后的第一行
HSSFRow row1 = sheet.createRow(0);
// 合并后的第一行第一列
HSSFCell row1_cell = row1.createCell(0);
// 设置值
row1_cell.setCellValue("用户列表");
// 设置样式(调用公用方法)
row1_cell.setCellStyle(createCellStyle(workbook, (short) 16));
// 生成标题行
HSSFRow row2 = sheet.createRow(1);
// 标题数组
String[] head = { "用户名", "帐号", "所属部门", "性别", "手机号码", "电子邮箱", "生日" };
// 标题样式
CellStyle headCellStyle = createCellStyle(workbook, (short) 10);
for (int i = 0; i < head.length; i++) {
// 创建每一列
HSSFCell cell_ = row2.createCell(i);
// 设置每一列的样式
cell_.setCellStyle(headCellStyle);
// 设置列值
cell_.setCellValue(head[i]);
}
// 生成数据行
// 遍历集合
if (list != null) {
for (int i = 0; i < list.size(); i++) {
// 对象
User user = list.get(i);
// 一个对象对应的是一行
HSSFRow row = sheet.createRow(i + 2);
// 创建每一列
row.createCell(0).setCellValue(user.getName());
row.createCell(1).setCellValue(user.getAccount());
row.createCell(2).setCellValue(user.getDept());
row.createCell(3).setCellValue(user.isGender() ? "男" : "女");
row.createCell(4).setCellValue(user.getMobile());
row.createCell(5).setCellValue(user.getEmail());
row.createCell(6).setCellValue(
this.converDateToString(user.getBirthday()));
}
}
try {
// 输出excel,关闭流
workbook.write(out);
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
<span style="white-space:pre"> </span>@Override
public List<T> findAll() {
return baseDao.findAll();
}
下载组件,引入jar包
poi-3.15-beta2.jar
poi-ooxml-3.15-beta2.jar
poi-ooxml-schemas-3.15-beta2.jar
xmlbeans-2.6.0.jar
<span style="white-space:pre"> java中excel操作的方式</span> 推荐 poi 是apache提供的开源组件!
目前最新版本:Apache POI 3.15-beta2
<span style="white-space:pre"> 了解excel
07或以上: xlsx 后缀
03或之前: xls 后缀
工作簿:表示整个excel对象 (Workbook)
工作表:表示一个excel页签 (Sheet)
行: excel的一行 (Row)
单元格: excel的列 (Cell)</span>
<span style="white-space:pre"> excel 2003 操作:
HSSFWorkbook 工作簿
HSSFSheet<span style="white-space:pre"> </span>createSheet() 通过工作簿创建工作表
HSSFCellStyle<span style="white-space:pre"> </span>createCellStyle() 创建单元格样式
HSSFFont<span style="white-space:pre"> </span>createFont() 创建字体
HSSFSheet
HSSFRow<span style="white-space:pre"> </span>createRow(int rownum) 通过工作表,创建行
HSSFRow
HSSFCell<span style="white-space:pre"> </span>createCell(int column) 创建单元格
int<span style="white-space:pre"> </span>getPhysicalNumberOfCells() 单元格个数
int<span style="white-space:pre"> </span>getRowNum() 行个数
HSSFCell
double<span style="white-space:pre"> </span>getNumericCellValue() 获取日期单元格值
java.lang.String<span style="white-space:pre"> </span>getStringCellValue() 获取普通字符串数据值
java.util.Date<span style="white-space:pre"> </span>getDateCellValue() 获取日志单元格的值!
excel 2007 操作:
只需要把H换成X
XSSFWorkBook
XSSFSheet
XSSFRow
XSSFCell</span>
导出用户列表 (新建excel,输出给浏览器)
a. listUI.jsp
点击:"导出", 提交到action (user_exportExcel.action)
b. 在action中,完成导出 (下载)
b1. 查询用户列表
b2. 设置下载的响应头:Content-disposition
b3. 把excel文件写入到reponse输出流!