现在的位置: 首页 > 综合 > 正文

关于POI的使用方法

2013年09月19日 ⁄ 综合 ⁄ 共 2674字 ⁄ 字号 评论关闭

     在日常的工作中,经常碰到需要将查询结果导出为Excel格式的数据进行查看或者保存。在此,介绍如何利用Apache的POI来进行此项工作。

 

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

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 ExportExcel {
    
        
//数据源
    private List list ;
    
        
public ExportExcel(List list){
               
this.list = list ;
        }

       
      
/**
        * 将list数据源里的数据导入到Excel表中
    * 
@param fieldName 导出到Excel表中的表头名
    * 
@param sheetName 工作表的名称
    * 
@param output
       
*/

      
public void getExcel(String[] fieldName,String sheetName,OutputStream output){
              
//产生工作薄对象
        HSSFWorkbook workbook = new HSSFWorkbook();

             
//产生工作表对象
        HSSFSheet sheet = workbook.createSheet();

             
//为了工作表能支持中文,设置字符集为UTF_16
                workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);

              
//产生一行
        HSSFRow row = sheet.createRow(0);

               
//产生单元格
        HSSFCell cell ;
        
               
//写入各个字段的名称
        for(int i=0;i<fieldName.length;i++){
                      
//创建第一行各个字段名称的单元格
             cell = row.createCell((short)i);
                      
//设置单元格内容为字符串型
             cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                      
//为了能在单元格中输入中文,设置字符集为UTF_16
                          cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                      
//给单元格内容赋值
             cell.setCellValue(fieldName[i]);
                }

               
//写入各条记录,每条记录对应excel表中的一行
        for(int i=0;i<list.size();i++){
            row 
= sheet.createRow(i+1);
            Object[] obj 
= (Object[])list.get(i);
            
for(int j=0;j<obj.length;j++){
                cell 
= row.createCell((short)j);
                cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                
if((obj[j] instanceof Double) || (obj[j] instanceof Long) || (obj[j] instanceof Integer) || (obj[j] instanceof Short)){
                    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                    cell.setCellValue(Double.parseDouble(String.valueOf(obj[j])));
                }
else{
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    cell.setCellValue(String.valueOf(obj[j]));
                }
                
            }

                }

             
try {
                  output.flush();
                  workbook.write(output);
            }
 catch (IOException e) {
                   e.printStackTrace();
            }

      }

}

     在这里,是用List结果集来存储查询结果的,list里面存储的是Object对象数组,这样方便通用,当然如果是其他的存储对象,在这里也可以修改下,使之达到符合实际要求。

抱歉!评论已关闭.