求导出Excel代码

我现在想通过java程序导出一个Excel报表,我可以传一个放有数据的list集合进去然后导出。报表效果如附件所示:
请各位朋友给点意见。最好给出代码,分不多,还是希望大家多提建议,谢谢了!

去我博客 ,有JXL操作EXCEL 包括样式、列宽、高等操作

[code="java"]
//往往Excel写数据
public final static int exportAdviseByCreateTime(final String tempFileName,final Map resultMap){
int result=SysConstant.RESULT_CODE_UNKNOWN_ERROR;
List totalList;
List detailList;

    if(resultMap == null || resultMap.isEmpty()){
        return result;
    }else{
        detailList = (List)resultMap.get("detailList");
        totalList = (List)resultMap.get("totalList");
    }

    try {
        int listSize=detailList.size();//list数据大小
        long maxSheetCount=1;//获得最大excel文件最多要创建多少个sheet;
        if(listSize%(EXCEL_MAX_ROW_EACH_SHEET-1)==0){//减1是因为字段名称占一行
            maxSheetCount=listSize/(EXCEL_MAX_ROW_EACH_SHEET-1);
        }else{
            maxSheetCount=listSize/(EXCEL_MAX_ROW_EACH_SHEET-1)+1;
        }

        //创建临时文件
        File tempFile = new File(tempFileName);
        //将excel文件绑定到临时文件
        WritableWorkbook book= Workbook.createWorkbook(tempFile); 
        WritableSheet sheet=null;//每个sheet

        Map map = null;

        //循环每个sheet
        for(int sheetIndex=0;sheetIndex<maxSheetCount;sheetIndex++){//sheetIndex表示sheet索引
            int sheetRowIndex = 1; //每个sheet的行索引。都是从第1行开始(第0行开始计数),第0行是列头
            //如果sheetIndex数大于默认数创建的最大sheet数

            sheet = book.createSheet("Sheet1",0);

            sheet.addCell(new Label(0, 0, "时间"));//Label(列,行,值)
            sheet.addCell(new Label(1, 0, "工单总量"));
            sheet.addCell(new Label(2, 0, "需要反馈"));
            sheet.addCell(new Label(3, 0, "不需反馈"));
            sheet.addCell(new Label(4, 0, "采集成功"));
            sheet.addCell(new Label(5, 0, "采集失败"));
            sheet.addCell(new Label(6, 0, "已完成"));
            sheet.addCell(new Label(7, 0, "未完成"));

            //明细
            for(int i=0;i<listSize;i++){
                if(sheetRowIndex%EXCEL_MAX_ROW_EACH_SHEET==0){
                    break;
                }
                map = (Map)detailList.get(i);
                if(map != null && !map.isEmpty()){
                    sheet.addCell(new Label(0,i+1,map.get("CREATETIME").toString())); //时间  
                    sheet.addCell(new Label(1,i+1,map.get("TOTAL").toString())); //工单总量 
                    sheet.addCell(new Label(2,i+1,map.get("NEEDFEEDBACK").toString())); //需要反馈  
                    sheet.addCell(new Label(3,i+1,map.get("UNNEEDFEEDBACK").toString())); //不需反馈    
                    sheet.addCell(new Label(4,i+1,map.get("SUCCESS").toString())); //采集成功
                    sheet.addCell(new Label(5,i+1,map.get("FAIL").toString())); //  采集失败
                    sheet.addCell(new Label(6,i+1,map.get("FINISHED").toString())); //已完成
                    sheet.addCell(new Label(7,i+1,map.get("UNFINISHED").toString())); //未完成
                }
                sheetRowIndex++;    //Excel换Sheet控制
                //到了65535,Excel换sheet
            }

            //合计
            map = (Map)totalList.get(0);
            if(map != null && !map.isEmpty()){
                sheet.addCell(new Label(0,listSize + 1,"合计")); //时间 
                sheet.addCell(new Label(1,listSize + 1,map.get("TOTAL").toString())); //工单总量    
                sheet.addCell(new Label(2,listSize + 1,map.get("NEEDFEEDBACK").toString())); //需要反馈 
                sheet.addCell(new Label(3,listSize + 1,map.get("UNNEEDFEEDBACK").toString())); //不需反馈   
                sheet.addCell(new Label(4,listSize + 1,map.get("SUCCESS").toString())); //采集成功
                sheet.addCell(new Label(5,listSize + 1,map.get("FAIL").toString())); // 采集失败
                sheet.addCell(new Label(6,listSize + 1,map.get("FINISHED").toString())); //已完成
                sheet.addCell(new Label(7,listSize + 1,map.get("UNFINISHED").toString())); //未完成
            }
        }
        book.write(); 
        book.close(); 
        result=SysConstant.RESULT_CODE_SUCCESS;
    } catch (RowsExceededException e) {
        System.out.println(e);
        e.printStackTrace();
    } catch (WriteException e) {
        System.out.println(e);
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
        System.out.println(e);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e);
    } 
    return result;
}

//把文件导到客户端
public static final void downloadFileToClient(
final HttpServletResponse httpServletResponse,
final String downloadFileName,
final String format,
final boolean isDelete){
try {
//构造下载文件
File downloadFile=new File(downloadFileName);
/////////////////设置下载文件信息//////////////////
long fileSize = downloadFile.length();//文件大小
httpServletResponse.addHeader("content-type",format);//设置输出格式
httpServletResponse.addHeader("Content-Disposition", "attachment; filename="+downloadFile.getName());
httpServletResponse.addHeader("content-length", Long.toString(fileSize));

        ///////////////向客户端写入文件fin ///////////////
        java.io.FileInputStream fin= new java.io.FileInputStream(downloadFile);
        final int bufferSize=1024;
        byte[] b = new byte[bufferSize];
        while((fin.read(b)) > 0) {
            httpServletResponse.getOutputStream().write(b);
        }

        fin.close();
        //将源文件删除
        if(isDelete){
            downloadFile.delete();
        }
    } catch (FileNotFoundException e1) {
        log.error("FileNotFoundException happened!");
        //throw new FsgprsException(10008);
    } catch(IOException e2) {
        log.error("IOException happened!");
    } catch(Exception e){
        log.error("Exception happened!");
    }
}

[/code]

其实楼主可以选择apache的POI框架,操作excel比较方便的。网上的资料也比较多,看官方文档也很容易学会的。

poi吧,看官方的文档复制改改就可以了

poi 和jxl都可以,自己去官方下载

http://poi.apache.org/

http://jexcelapi.sourceforge.net/