使用POI导出excel

引言:对于excel的导出,首先是将数据写到WorkBook中,然后将book以流的形式写出即可,看代码:

 

[html][/html] view plaincopy

  1. public void exportResultInfo(String fileName,String savePath) throws Exception{
  2.         HSSFWorkbook book = new HSSFWorkbook();
  3.     String[] greenUrlLabel = new String[] { “A”, “B”, “C”,
  4.                 “D”, “E”, “F” };
  5.         createSheet2(book, “result_info”, greenUrlLabel, dataList);
  6.         downLoad(book, fileName, savePath);
  7.     }

部分代码解释: dataList是从数据中获取到的数据,也就是你想导出的数据

createSheet2(book, “result_info”, greenUrlLabel, dataList);将数据写到book中

downLoad(book, fileName, savePath);将book写到excel中,对应的方法分别如下。

将数据写到book中:

[html][/html] view plaincopy

  1. public void createSheet2(HSSFWorkbook book, String sheetName,
  2.             String[] label, List<Object[]> list) {
  3.         // 单sheet 最大行数
  4.         // final Integer MAX_ROW_SIZE = 65536;
  5.         final Integer MAX_ROW_SIZE = 65535;
  6.         // 创建Sheet并设置sheetName
  7.         HSSFSheet sheet = null;
  8.         // sheet number
  9.         int sheetNum = 0;
  10.         // sheet data row
  11.         int rowCount = 0;
  12.         sheet = book.createSheet(sheetName);
  13.         sheetNum++;
  14.         // 首行填写表头
  15.         HSSFRow row00 = sheet.createRow(rowCount++);// 创建行 rowCount+1
  16.         for (int t = 0; t < label.length; t++) {
  17.             HSSFCell cell0 = row00.createCell(t);
  18.             cell0.setCellValue(label[t]);
  19.         }
  20.         // 数据行遍历
  21.         if (list != null && list.size() > 0) {
  22.             for (int i = 1; i <= list.size(); i++) {
  23.                 // rowCount 为0时 新sheet初始化、表头数据初始化
  24.                 if (rowCount == 0) {
  25.                     // 创建新Sheet
  26.                     sheet = book.createSheet(sheetName + “_” + sheetNum);
  27.                     sheetNum++;
  28.                     // 首行填写表头
  29.                     HSSFRow row0 = sheet.createRow(rowCount++);// 创建行
  30.                     // rowCount+1
  31.                     for (int t = 0; t < label.length; t++) {
  32.                         HSSFCell cell0 = row0.createCell(t);
  33.                         cell0.setCellValue(label[t]);
  34.                     }
  35.                 }
  36.                 // 创建数据行
  37.                 HSSFRow row = sheet.createRow(rowCount++); // 第二行开始
  38.                 Object[] objects = list.get(i – 1); // 填写数据集合的第一行
  39.                 // 列循环
  40.                 if (objects != null && objects.length > 0) {
  41.                     for (int j = 1; j <= objects.length; j++) {
  42.                         // 创建Cell
  43.                         HSSFCell cell = row.createCell(j – 1);
  44.                         // 获取数据对象
  45.                         Object obj = objects[j – 1];
  46.                         // 填写数据
  47.                         cell.setCellValue(new HSSFRichTextString(
  48.                                 getStringValueFromObject(obj)));
  49.                     }
  50.                 }
  51.                 // rowcount 归零判断 归零 新Sheet页面的开始
  52.                 if (rowCount == MAX_ROW_SIZE) {
  53.                     rowCount = 0;
  54.                 }
  55.                 Contants.expCount++;
  56.             }
  57.         }
  58.     }

部分代码解释:由于早期的excel最大的行数只能到65535,所以在这地方做了判断,但数据条数大于这个数的时候,重新开一个sheet页,进行写入。

将book写到excel中:

[html][/html] view plaincopy

  1. public String downLoad(HSSFWorkbook workbook, String fileName,
  2.             String savePath) throws IOException {
  3.         FileOutputStream fos = null;
  4.         ByteArrayOutputStream byteos = null;
  5.         try {
  6.             // 将HSSFWorkbook 写入字节流
  7.             byteos = new ByteArrayOutputStream();
  8.             workbook.write(byteos);
  9.             // 获取所有字节及其长度
  10.             byte[] xlsBytes = byteos.toByteArray();
  11.              int length = xlsBytes.length;
  12.             // 获取 流ServletOutputStream
  13.             File file = new File(savePath + File.separator + fileName);
  14.             if (!file.getParentFile().exists())
  15.                 file.getParentFile().mkdirs();
  16.             if (!file.exists())
  17.                 file.createNewFile();
  18.             fos = new FileOutputStream(file);
  19.             fos.write(xlsBytes);
  20.             System.out.println(“End of transform the file :” + fileName);
  21.             fos.flush();
  22.         } catch (final IOException e) {
  23.             throw e;
  24.         } finally {
  25.             // 关闭字节流
  26.             if (byteos != null) {
  27.                 byteos.close();
  28.             }
  29.             if (fos != null)
  30.                 try {
  31.                     fos.close();
  32.                 } catch (IOException e) {
  33.                     e.printStackTrace();
  34.                 }
  35.         }
  36.         return null;
  37.     }

这块就是将book写到对于的excel文件中,这里的filename可以自己给定。对于解析所需要的包的可以在

这里下载http://download.csdn.net/detail/javaweiming/5849101。

标签