在现实的办公中,我们常常会有这样一个要求:要求把报表直接用excel打开。在实习中有这样一个需求。根据所选择的资源查询用户所提供附件的全部信息并生成excel供下载。但是在查询的时候我们需要来检测用户所提供的附件里面的信息是否有错误(身份证)。有错误的生成错误信息excel。
Apache的POI项目,是目前比较成熟的HSSF接口,用来处理Excel对象。其实POI不仅仅只能处理excel,它还可以处理word、PowerPoint、Visio、甚至Outlook。
这里我先介绍利用POI如何生成excel。
首先在生成Excel前,我们需要理解一下Excel文件的组织形式。在POI中,是这样理解的:一个Excel文件对应一个workbook,一个workerbook是有若干个sheet组成的。一个sheet有多个row,一个row一般存在多个cell。
对于上面的四个名词我们可以在下图理解
对于生成Excel,POI提供了如下几个基本对象:
HSSFWorkbook excel 的文档对象
HSSFSheet excel 的表单
HSSFRow excel 的行
HSSFCell excel 的格子单元
从上面的图片和Excel的组织结构,我们就可以明白创建Excel的步骤。
1、生成文档对象HSSHWorkbook。
2、通过HSSFWorkbook生成表单HSSFSheet。
3、通过HSSFSheet生成行HSSFRow
4、通过HSSFRow生成单元格HSSFCell。
下面是展示代码:
身份证错误Bean(ErrorCondition.java)
/**
*@Project: excel
*@Author: chenssy
*@Date: 2013-4-4
*@Copyright: chenssy All rights reserved.
*/
public class ErrorCondition {
private String name; // 姓名
private String idCard; // 身份证
private String status; // 错误状态
private String message; // 错误信息
ErrorCondition(String name,String idCard,String status,String message){
this.name = name;
this.idCard = idCard;
this.status = status;
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
处理类(ExportErrorExcel.java)
/**
*@Project: excel
*@Author: chenssy
*@Date: 2013-4-4
*@Copyright: chenssy All rights reserved.
*/
public class ExportErrorExcel {
public static void main(String[] args) {
//第一步创建workbook
HSSFWorkbook wb = new HSSFWorkbook();
//第二步创建sheet
HSSFSheet sheet = wb.createSheet("身份证错误信息");
//第三步创建行row:添加表头0行
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中
//第四步创建单元格
HSSFCell cell = row.createCell(0); //第一个单元格
cell.setCellValue("姓名"); //设定值
cell.setCellStyle(style); //内容居中
cell = row.createCell(1); //第二个单元格
cell.setCellValue("身份证");
cell.setCellStyle(style);
cell = row.createCell(2); //第三个单元格
cell.setCellValue("错误状态");
cell.setCellStyle(style);
cell = row.createCell(3); //第四个单元格
cell.setCellValue("错误信息");
cell.setCellStyle(style);
//第五步插入数据
List<ErrorCondition> list = ExportErrorExcel.getErrorCondition();
for (int i = 0; i < list.size(); i++) {
ErrorCondition errorCondition = list.get(i);
//创建行
row = sheet.createRow(i+1);
//创建单元格并且添加数据
row.createCell(0).setCellValue(errorCondition.getName());
row.createCell(1).setCellValue(errorCondition.getIdCard());
row.createCell(2).setCellValue(errorCondition.getStatus());
row.createCell(3).setCellValue(errorCondition.getMessage());
}
//第六步将生成excel文件保存到指定路径下
try {
FileOutputStream fout = new FileOutputStream("D:\\errorCondition.xls");
wb.write(fout);
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Excel文件生成成功...");
}
public static List<ErrorCondition> getErrorCondition(){
List<ErrorCondition> list = new ArrayList<ErrorCondition>();
ErrorCondition r1 = new ErrorCondition("张三", "4306821989021611", "L", "长度错误");
ErrorCondition r2 = new ErrorCondition("李四", "430682198902191112","X", "校验错误");
ErrorCondition r3 = new ErrorCondition("王五", "", "N", "身份证信息为空");
list.add(r1);
list.add(r2);
list.add(r3);
return list;
}
}
通过上面六个步骤就可以在指定的位置生成Excel文件了。