对于不同身份的人员,可能要求以不同方式查看数据。比如客户并不想通过系统查看用户信息,那我们就需要让系统具备一个打印功能,比如导出到Excel。此处使用POI实现。为了方便使用,我们已经进行了封装(封装原理很简单,稍微研究便可)。此处先以一个简单的应用入门,关于POI的更多在后面研究。

================================================

这是一个包装类,直接copy到你的utils下即可。

/**
 * 系统数据导出Excel 生成器
 */

import java.io.OutputStream;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelFileGenerator {

 private final int SPLIT_COUNT = 1500; //Excel每个工作簿的行数

 private ArrayList fieldName = null; //excel标题数据集

 private ArrayList fieldData = null; //excel数据内容 

 private HSSFWorkbook workBook = null;

 /**
  * 构造器
  * @param fieldName 结果集的字段名
  * @param data结果集的数据

  */
 public ExcelFileGenerator(ArrayList fieldName, ArrayList fieldData) {

  this.fieldName = fieldName;
  this.fieldData = fieldData;
 }

 /**
  * 创建HSSFWorkbook对象
  * @return HSSFWorkbook
  */
 public HSSFWorkbook createWorkbook() {

  workBook = new HSSFWorkbook();
  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);
   HSSFRow headRow = sheet.createRow((short) 0);
   for (int j = 0; j < fieldName.size(); j++) {
    HSSFCell cell = headRow.createCell((short) j);
    //添加样式
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    if(fieldName.get(j) != null){
     cell.setCellValue((String) fieldName.get(j));
    }else{
     cell.setCellValue("-");
    }
   }

   for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
    HSSFRow row = sheet.createRow((short) (k + 1));
    //将数据内容放入excel单元格
    ArrayList rowList = (ArrayList) fieldData.get((i - 1)
      * SPLIT_COUNT + k);
    for (int n = 0; n < rowList.size(); n++) {
     HSSFCell cell = row.createCell((short) n);
     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
     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);
  os.close();
 }

}
=====================================================

使用方法:

在你要实现导出功能的Action中,先分别获得表头ArrayList fieldName,和表中数据ArrayList<ArrayList<String>> fieldData,首先实例化【临时有事,候补】