您的位置:首页 > 编程语言 > Java开发

导出Excel工具类

2015-12-31 16:53 387 查看
一般导出excel需要在后端封装好HSSFWorkbook对象,直接就可以下载,而且在controller层一般是用get方式请求。现在我们先把ExcelUtil的工具类贴出来,然后在贴出来一个controller的代码来引导controller的编写 ,大家关心的导包可以看上面的导包情况,其中最后一个是maven模组化的父模块

package com.mavenspring.demo.util;

import java.util.List;

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.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;

import com.mavenspring.demo.model.ProjectUser;

/**
*
* @date 2015年10月10日 下午2:31:56
*/
@SuppressWarnings("deprecation")
public class ExcelUtil {
/**
* 生成中奖纪录Excel
*
* @param list
* @return
*/
public static HSSFWorkbook drawExcelReport(List<ProjectUser> list) {

// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("项目用户数据");

// 创建标题单元格样式
HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
headStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 背景色
headStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框

// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow rowTilte = sheet.createRow((short) 0);
// 设置行高500
rowTilte.setHeight((short) 500);
// 合并单元格,参数依次为起始行,结束行,起始列,结束列
sheet.addMergedRegion(new CellRangeAddress(0, (short) 0, 0, (short) 4));
// 创建第一行的第一个单元格
HSSFCell ce = rowTilte.createCell(0);
ce.setCellValue("项目用户数据"); // 表格的第一行第一列显示的数据
ce.setCellStyle(headStyle); // 样式,居中

// 设置列的标题
HSSFRow rowHead = sheet.createRow((int) 1);
String[] excelHeader = { "姓名", "用户名", "密码", "年龄", "用户头像","住址" };

for (int i = 0; i < excelHeader.length; i++) {
HSSFCell cell = rowHead.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(headStyle);
sheet.setColumnWidth(i, 20 * 256);
}

HSSFRow row = null;
ProjectUser record = null;

for (int i = 1; i <= list.size(); i++) {
row = sheet.createRow(i + 1);// 从第二行开始写入数据
record = list.get(i - 1);

row.createCell(0).setCellValue(record.getName()); // 姓名
row.createCell(1).setCellValue(record.getUserName()); // 用户名
if (record.getPassword() != null) {
row.createCell(2).setCellValue(record.getPassword());// 密码
}

if (record.getAge() != null) {
row.createCell(3).setCellValue(record.getAge()); //年龄
}
row.createCell(4).setCellValue(record.getPersonImgUrl()); // 用户头像
row.createCell(5).setCellValue(record.getAddress()); //住址

}
return wb;
}
}


下面是控制层怎么编写访问路径,我这边使用的是springmvc。

package com.mavenspring.project.controller;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mavenspring.demo.model.ProjectUser;
import com.mavenspring.demo.model.req.ProjectUserReq;
import com.mavenspring.demo.util.ExcelUtil;
import com.mavenspring.project.service.ProjectUserService;

/**
*
* @version 创建时间:2015年12月10日 下午2:12:07
* 类说明
*/

@Controller
public class ProjectUserController {

private static Logger log = LoggerFactory.getLogger(ProjectUserController.class);

@Autowired
private ProjectUserService projectUserService;

@ResponseBody
@RequestMapping(value="/user/list",method=RequestMethod.POST)
public List<ProjectUser> getAllProjectUser(@RequestBody ProjectUserReq req){
return projectUserService.getAllProjectUser(req);
}

@ResponseBody
@RequestMapping(value="/user/insert",method=RequestMethod.POST)
public int insertProjectUser(ProjectUser projectUser){
return projectUserService.insertProjectUser(projectUser);
}

@RequestMapping(value="/user/downuserexcel")
public void downLoadProjectExcel(@RequestBody ProjectUserReq req,HttpServletRequest request,HttpServletResponse response){
String fileNameStr = "abc";
try {
String downloadFileName = new String(
fileNameStr.getBytes("gb2312"), "iso8859-1");
req.setPageSize(0);// 不需要分页
List<ProjectUser> list = projectUserService.getAllProjectUser(req);

HSSFWorkbook wb = ExcelUtil.drawExcelReport(list);

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename="
+ downloadFileName);
OutputStream ouputStream;
ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
log.error("导出办卡进度数据失败!", e.getMessage());
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息