本文将介绍在Java Web中使用Apache POI实现管理系统中常见的导出Excel功能。
首先在pom.xml中导入poi的依赖包:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
然后编写工具类ExcelUtil.java,具体内容及解释如下:
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 {
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(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取数据
Map<String, Object> data = requirementService.query(null);
List<Requirement> list = (List<Requirement>) data.get("requirements");
//excel标题
String[] title = {"id","姓名","手机号","城市","县区","房源","地铁线","地铁站","售价","面积","房型","用途","权属","楼层","朝向",
"楼龄","有无电梯","装修","咨询时间","备注"};
//excel文件名
String fileName = "购房需求信息表"+System.currentTimeMillis()+".xls";
//sheet名
String sheetName = "购房需求信息表";
String[][] content = new String[list.size()+1][title.length];
for (int i = 0; i < list.size(); i++) {
Requirement r = list.get(i);
System.out.println(r.toString());
content[i][0] = r.getId()+"";
content[i][1] = r.getUsername();
content[i][2] = r.getPhone();
content[i][3] = r.getCity();
content[i][4] = r.getDistrict();
content[i][5] = r.getVillage();
content[i][6] = r.getLineNum();
content[i][7] = r.getStationName();
content[i][8] = r.getPrice();
content[i][9] = r.getSquareMeter();
content[i][10] = r.getHouseKind();
content[i][11] = r.getUasge();
content[i][12] = r.getOwnerShip();
content[i][13] = r.getFloor();
content[i][14] = r.getDirection();
content[i][15] = r.getAge();
content[i][16] = r.getElevator();
content[i][17] = r.getDecoration();
content[i][18] = sdf.format(r.getDate());
content[i][19] = r.getRemark();
}
//创建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();
}
}
部署Java Web后直接访问就可以生成并下载Excel表格了。