posts - 5,  comments - 7,  trackbacks - 0
poi是apache基金下面的一个开源项目,在[url]http://www.apache.org/dyn/closer.cgi/jakarta/poi/[/url] 可以下载到poi的包
下载以后把解压得到的文件加到web-inf下面的lib目录下面就可以使用了。

下面先介绍一下生成excel文件要用的类:
HSSFWorkbook 用于创建excel文件
HSSFSheet 用于创建excel的书册
HSSFRow    用于创建一行
HSSFCell     用于创建一个单元格
HSSFCellStyle 用于创建一个单元格的格式
HSSFFont    用于创建一个单元格的字体格式
下面用本人写的一个通用的工具类作为例子说明一下生成文件的方法
(这里只列出部分代码,详细的请看附件的源码,如果要使用附件的代码,请保留原创人的名字)
public   String createFile(List<Hashtable> hlist)//根据传入的参数读取数据,这里用了范型指定参数是hashtable类型的list
{
HSSFWorkbook wb 
= new HSSFWorkbook();//创建excel文件
for(int hcount=0;hcount<hlist.size();hcount++)
{
Hashtable ha 
= hlist.get(hcount);//获取第hcount个元素
HSSFSheet sheettemp = wb.createSheet();
wb.setSheetName(hcount,(String)ha.get(
"name"),(short)1);//新建一个sheet
HSSFRow rowtitle = sheettemp.createRow((short)0);//添加表头
       HSSFCell celltitle = rowtitle.createCell((short)0);
       celltitle.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置字体编码
       celltitle.setCellValue((String)ha.get("title"));//设置表头内容
       rowtitle = sheettemp.createRow((short)1);//新增一行用于存放表头内容
       String[] fields = (String[])ha.get("field");//获取列头
       sheettemp.addMergedRegion(new Region(0,(short)0,0,(short)(fields.length-1)));//合并第一行
       rowtitle = sheettemp.getRow(0);//获得第一行的引用
       celltitle = rowtitle.getCell((short)0);//获得第一行第一个单元格的引用
       setTitleStyle(wb,celltitle);//设置表头格式
       HSSFRow rowfield = sheettemp.createRow((short)1);//新增一行用于存放列头内容
       for(int i = 0;i<fields.length;i++)//根据获取到的列头数据,循环设置列头的内容
       {
       HSSFCell cellfield 
= rowfield.createCell((short)i);
       cellfield.setEncoding(HSSFCell.ENCODING_UTF_16);
       cellfield.setCellValue(fields[i]);
       setFieldStyle(wb,cellfield);
//设置列头格式
       int xx = cellfield.getStringCellValue().length();
       sheettemp.setColumnWidth((
short) i,(short)(600*xx));
       }

       List listtemp 
= (List)ha.get("body");//获取表格内容
       Object[] rowtemp = null;
       
int count = 0;
       
for(Iterator it = listtemp.iterator();it.hasNext();)//迭代生成数据
       {
        rowtemp 
= (Object[])it.next();
        HSSFRow rowbody 
= sheettemp.createRow((short)(count+2));
        
for(int i = 0;i<rowtemp.length;i++)
        
{
        HSSFCell cellbody 
= rowbody.createCell((short)i);
        cellbody.setEncoding(HSSFCell.ENCODING_UTF_16);
        cellbody.setCellValue((String)rowtemp[i]);
        }

        count
++;
       }

}

FileOutputStream fileOut;
try {
fileOut 
= new FileOutputStream(setFilepath());//生成文件
try {
wb.write(fileOut);
}
 catch (IOException e) {
System.out.println(e.toString());
}

       
try {
fileOut.close();
}
 catch (IOException e) {
System.out.println(e.toString());
}

}
 catch (FileNotFoundException e) {
System.out.println(e.toString());
}

return filename;
}


最后说明一下附件的各个类的作用:
Report.java 接口类,所有的获取数据的类必须实现这个接口,以便生成文件时统一管理;
ExcelContent.java 实现了Report接口,负责获取数据并组装到hashtable;
ReportTool.java 根据传入的参数生成excel文件,并返回生成的文件名;
CreateReport.java 被外部程序调用,负责获取数据和把数据传递给ReportTool,最后生成excel文件,返回生成的文件名给调用者。
posted on 2008-11-25 16:34 Vincent-chen 阅读(488) 评论(0)  编辑  收藏 所属分类: POIPrint

只有注册用户登录后才能发表评论。


网站导航: