poi是apache基金会的一个开源项目.它主要是为了使用java生成对应的office文档.本案例中使用的就是其中的一个-HSSF.今天主要来看一下这个工具类的使用.在一些要求生成报表的的项目中.这个功能还是很有用的.
import org.apache.poi.hssf.util.HSSFColor;
public class ExcelFileGenerator {
private final int SPLIT_COUNT = 15; // Excel每个工作表的行数
@SuppressWarnings("unchecked")
private ArrayList fieldName = null; // excel标题数据集
@SuppressWarnings("unchecked")
private ArrayList fieldData = null; // excel数据内容
private HSSFWorkbook workBook = null;
/**
* 构造器
*
* @param fieldName
* 结果集的字段名
* @param data
*/
@SuppressWarnings("unchecked")
public ExcelFileGenerator(ArrayList fieldName, ArrayList fieldData) {
this.fieldName = fieldName;
this.fieldData = fieldData;
}
/**
* 创建HSSFWorkbook对象
*
* @return HSSFWorkbook
*/
@SuppressWarnings("unchecked")
public HSSFWorkbook createWorkbook() {
workBook = new HSSFWorkbook();// poi报表的核心对象
int rows = fieldData.size();// 获取内容的数据
int sheetNum = 0;// 共分几页
if (rows % SPLIT_COUNT == 0) {
sheetNum = rows / SPLIT_COUNT;// 分页
} else {
sheetNum = rows / SPLIT_COUNT + 1;
}
for (int i = 1; i <= sheetNum; i++) {
HSSFSheet sheet = workBook.createSheet("Page " + i);// 使用workbook创建sheet
HSSFRow headRow = sheet.createRow(0); // poi特点:先要创建sheet,通过sheet创建row,第1行
for (int j = 0; j < fieldName.size(); j++) {// 循环excel的标题
HSSFCell cell = headRow.createCell(j);// poi特点:先要创建row,通过row创建cell
// 添加样式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 指定导出的类型
// 设置列(有数据的列)的宽度
sheet.setColumnWidth(j, 6000);
// 设置样式字体加粗、颜色变红
// 使用workBook获取操作单元格的样式
HSSFCellStyle style = workBook.createCellStyle();
// 获取字体对象
HSSFFont fontnbsp&= workBook.createFont();
// 字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 字体颜色变红
short color = HSSFColor.RED.index;
font.setColor(color);
// 将字体的样式添加到HSSFCellStyle中
style.setFont(font);
if (fieldName.get(j) != null) {
cell.setCellStyle(style);
cell.setCellValue((String) fieldName.get(j));// 向excel的单元格中设置
} else {
cell.setCellStyle(style);
cell.setCellValue("-");
}
}
for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
if (((i - 1) * SPLIT_COUNT + k) >= rows)// 实现excel的分页
break;// 到头了
HSSFRow row = sheet.createRow(k + 1);// 创建row,+1,从excel的第二行开始写入值
// 将数据内容放入excel单元格
ArrayList rowList = (ArrayList) fieldData.get((i - 1)
* SPLIT_COUNT + k); // 只有一页的话,就只有k列
for (int n = 0; n < rowList.size(); n++) {
HSSFCell cell = row.createCell(n);// 创建cell
if (rowList.get(n) != null) {
cell.setCellValue((String) rowList.get(n).toString());
} else {
cell.setCellValue("");
}
}
}
}
return workBook;
}
public void expordExcel(OutputStream os) throws Exception {
workBook = createWorkbook();
workBook.write(os);// 生成excel文件
os.close();
}
}
代码中的HSSFWorkbook()就是指的一个excel文件对象,HSSFSheet则是一个excel页对象,
HSSFRow代表excel中的一行,HSSFCell则是excel中的一个小格.依靠这个工具类,
就可以传递进去数据,生成对应的excel文件.当然了,服务器响应的时候的类型也要有所变化,
应该这样写 response.setContentType("application/vnd.ms-excel");
本案例讲完了,有什么不懂的再来问我这个前辈高人吧!哦呵呵呵呵呵!!!