【Java】JXL和POI操做Excel

1、Java中常見的用來操做Excl的方式通常有2種:jxl和poi。java

2、兩種方式區別在於:
JXL只能對Excel進行操做,屬於比較老的框架,它只支持到Excel 95-2000的版本。如今已經中止更新和維護。
POI是apache的項目,可對微軟的Word,Excel,Ppt進行操做,包括office2003和2007,Excl2003和2007。poi如今一直有更新。因此如今主流使用POI。sql

3、下面分別使用二者代碼進行常見操做:
1.JXL數據庫

public void outputExcel(HttpServletRequest request, HttpServletResponse response,String title)throws  IOException
{
    //獲取輸出流 
    OutputStream os = response.getOutputStream(); 
    HttpSession session=request.getSession();
    String oprator=(String)session.getAttribute("yhxm");
    //設置編碼  
    response.setHeader("Content-disposition", "attachment; filename="+"cprdpxx"+".xls");// 設定輸出文件頭 
    request.setCharacterEncoding("utf-8");  
    //設置文件格式
    response.setContentType("application/vnd.ms-excel;charset=utf-8");
        //加標題    
    //標題字體   
    //設置單元格字體,位置
    jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.COURIER, 18, WritableFont.BOLD, true);  
    jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc); 
    try {
        wcfFC.setAlignment(jxl.format.Alignment.CENTRE);
        wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);    
        //字段字體   
        jxl.write.WritableFont wfc1 = new jxl.write.WritableFont(WritableFont.COURIER, 12, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, Colour.BLACK);  
        jxl.write.WritableCellFormat wcfFC1 = new jxl.write.WritableCellFormat(wfc1);
        wcfFC1.setBorder(Border.NONE,BorderLineStyle.THIN,Colour.GRAY_50);
        //設置字體位置
        wcfFC1.setAlignment(jxl.format.Alignment.CENTRE);  
        wcfFC1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
        //////////////////////////////////////////////
        //2013/7/17
        //標題字體
        jxl.write.WritableFont wfc3 = new jxl.write.WritableFont(WritableFont.COURIER, 14, WritableFont.BOLD, false,UnderlineStyle.NO_UNDERLINE, Colour.BLACK);  
        jxl.write.WritableCellFormat wcfFC3 = new jxl.write.WritableCellFormat(wfc3);
        wcfFC3.setBorder(Border.NONE,BorderLineStyle.THIN,Colour.GRAY_50);
        //設置字體位置
        wcfFC3.setAlignment(jxl.format.Alignment.CENTRE);  
        wcfFC3.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);  
        ////////////////////////////////////////////////
        //查詢結果字體  
        jxl.write.WritableCellFormat wcfFC2 = new jxl.write.WritableCellFormat();  
        wcfFC2.setAlignment(jxl.format.Alignment.CENTRE); 
        wcfFC2.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);   
        WritableWorkbook wbook = Workbook.createWorkbook(os);  
        //設置默認字體
        WritableFont font=new WritableFont(WritableFont.COURIER, 12, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        WritableCellFormat cFormat = new WritableCellFormat(font);
        cFormat.setAlignment(jxl.format.Alignment.CENTRE);
        cFormat.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.GRAY_50);
        cFormat.setBackground(Colour.WHITE);
        //2013/7/17
        //設置信息頭欄字體
        WritableFont font11=new WritableFont(WritableFont.COURIER, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        WritableCellFormat cFormat11 = new WritableCellFormat(font11);
        cFormat11.setAlignment(jxl.format.Alignment.CENTRE);
        cFormat11.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.GRAY_50);
        cFormat11.setBackground(Colour.WHITE);
        
        
        //寫sheet名稱 
        WritableSheet wsheet = wbook.createSheet("長江大學職稱評審投票信息統計表", 0);
        //設置單元格默認列寬
        wsheet.getSettings().setDefaultColumnWidth(10);
        wsheet.getSettings().setDefaultRowHeight(350);
                    //設置sheet頁面水平打印
                     wsheet.getSettings().setHorizontalCentre(true);
        //默認爲橫向打印//2013/7/17
        wsheet.setPageSetup(PageOrientation.LANDSCAPE.LANDSCAPE,PaperSize.A4,0.5d,0.5d);
        /**
         * lrr 2014-05-27 BEGIN
         * 功能描述:設置頁碼格式:第 X 頁(共 X 頁)
         */
//        wsheet.setFooter("", "&P", "");//過期的方法
        ··HeaderFooter footer = new HeaderFooter();
        ··Contents contentsFooter = footer.getCentre();  
        contentsFooter.setFontSize(10);  
        contentsFooter.append("第 ");
        contentsFooter.appendPageNumber();
        contentsFooter.append(" 頁 ( 共 ");
        contentsFooter.appendTotalPages();  
        contentsFooter.append(" 頁 )");
        //設置打印標題行
//        wsheet.getSettings().setVerticalFreeze(3);
        SheetSettings ss=wsheet.getSettings();
        ss.setFooter(footer);// 設置頁腳
        /**
         * lrr 2014-05-27 END
         * 功能描述:設置頁碼格式:第 X 頁(共 X 頁)
         */
//        ss.setPrintTitles(0,2,0,10);
        ss.setPrintTitlesRow(0,2);//設置固定打印標題
        ss.setOrientation(PageOrientation.LANDSCAPE);
        wsheet.setPageSetup(PageOrientation.LANDSCAPE);
        
        //標題   
        wsheet.mergeCells(0, 0, 10, 0);
        /**
         * lrr 2014-05-24 改 BEGIN
         * 功能描述:修改投票信息統計表格式
         */
        wsheet.addCell(new jxl.write.Label(0, 0, "長江大學職稱評審投票信息統計表",wcfFC3));//設置統計表標題
        WritableFont font1=new WritableFont(WritableFont.COURIER, 12, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        WritableCellFormat cFormat1 = new WritableCellFormat(font1);
        cFormat1.setAlignment(jxl.format.Alignment.RIGHT);
        cFormat1.setBorder(Border.NONE,BorderLineStyle.THIN,Colour.GRAY_50);
        cFormat1.setBackground(Colour.WHITE);
        wsheet.addCell(new jxl.write.Label(0,1,"評審日期:"+(new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date())) ,cFormat1));//合計列
        /**
         * lrr 2014-05-24 改 END
         * 功能描述:修改投票信息統計表格式
         */            
        /**
         * 如下爲從數據庫中查詢數據添加到wsheet中
         */    
        PersistenceManagerOfZcps pmoz=new PersistenceManagerOfZcps();
        String zsql="select count(*) from view_cprdp where 1=1 "+title;//總人數
        //String xb_n_sql="select count(*) from view_cprxx where xb='1'";//性別男 人數
        String hj="";//合計
        String sql="select * from view_cprdp where 1=1 "+title;
//        String year=request.getParameter("year");
        sql+="order by year_dm desc,zcbh asc,ls,ty_num desc,cpbh";
//        //System.out.println("sql="+sql);
        ResultSet rs=pmoz.executeQuery(sql);
        List<zc_cprdpxx> cprdp_list=new ArrayList<zc_cprdpxx>();
        int zs = 0;//參評人總人數
        int ns=0;//男參評人數
        try {
            while(rs.next())
            {
                zc_cprdpxx zp=new zc_cprdpxx();
                PersistenceManagerOfZcps pm=new PersistenceManagerOfZcps();
                    zp.setYear(rs.getString("year_mc")==null?"":rs.getString("year_mc").trim());
                    zp.setCpbh(rs.getString("cpbh")==null?"":rs.getString("cpbh").trim());
                    zp.setCpxm(rs.getString("cpxm")==null?"":rs.getString("cpxm").trim());
                    zp.setLxdh(rs.getString("lxdh")==null?"":rs.getString("lxdh").trim());
                    zp.setTy_num(rs.getString("ty_num")==null?"":rs.getString("ty_num").trim());
                    zp.setBty_num(rs.getString("bty_num")==null?"":rs.getString("bty_num").trim());
                    zp.setQq_num(rs.getString("qq_num")==null?"":rs.getString("qq_num").trim());
                    zp.setSftg(rs.getString("sftg")==null?"":rs.getString("sftg").trim());
                    zp.setLs(rs.getString("ls")==null?"":rs.getString("ls").trim());
                    zp.setZwm(rs.getString("zwm_mc")==null?"":rs.getString("zwm_mc").trim());//2013/7/21
                    zp.setZcbh(pm.getPureCode_zcm(rs.getString("zcbh")==null?"":rs.getString("zcbh").trim()));    
                    zp.setCprzt(pm.getPureCode("code_zczt", rs.getString("zcbh").substring(1, 2)));
                    pm.close();
                    //zp.setNl(rs.getString("nl")==null?"":rs.getString("nl").trim());
                    
                    cprdp_list.add(zp);                
            }
            rs=pmoz.executeQuery(zsql);
            while(rs.next())
            {
                 zs=rs.getInt(1);
            }
            rs.close();
           }catch (SQLException e) {
             os.close();
            // TODO Auto-generated catch block
            this.cwts("導出失敗,請稍後重試!", response);
            e.printStackTrace();
        }
        finally
        {
            pmoz.close();//關閉數據鏈接
        }
        
            
        
        //hj="評委總人數爲:"+String.valueOf(zs)+"     性別        男:"+String.valueOf(ns)+"   女:"+String.valueOf(zs-ns);
        wsheet.mergeCells(0, 1, 10, 1);//合併0到10單元格
        //wsheet.addCell(new jxl.write.Label(0,1,hj ,cFormat));//合計列
        // 設置固定的打印標題//2013/7/17
////    wsheet.getSettings().setPrintArea(0, 2, 0,7);
//    SheetSettings setting = wsheet.getSettings();  
//    setting.setPrintTitlesRow(0, 3); 
    
        int i = 0;
        int j=0;
        //String[] colum={"年度","參評人編號","單位名稱","參評人姓名","性別","申報職稱級別","申報職稱名稱"};
        //2013/7/17修改
        String[] colum={"年度", "參評人編號","工做單位","參評人姓名", "申報職稱","申報狀態","輪數","贊成數","不一樣意數","棄權數","是否經過"};
        for (i = 0; i <11; i++) {   
            // 加入行字段名    
            wsheet.addCell(new jxl.write.Label(i, 2, colum[i],      cFormat11));
            } 
        for(i=3;i<cprdp_list.size()+3;i++)
        {
            wsheet.addCell(new jxl.write.Label(0,i, cprdp_list.get(i-3).getYear(),      cFormat));
            wsheet.addCell(new jxl.write.Label(1,i, cprdp_list.get(i-3).getCpbh(),      cFormat));
            wsheet.addCell(new jxl.write.Label(2,i, cprdp_list.get(i-3).getLxdh(),      cFormat));
            wsheet.addCell(new jxl.write.Label(3,i, cprdp_list.get(i-3).getCpxm(),      cFormat));
            wsheet.addCell(new jxl.write.Label(4,i, cprdp_list.get(i-3).getZwm(),      cFormat));
            wsheet.addCell(new jxl.write.Label(5,i, cprdp_list.get(i-3).getCprzt(),      cFormat));
            wsheet.addCell(new jxl.write.Label(6,i, cprdp_list.get(i-3).getLs(),      cFormat));
            wsheet.addCell(new jxl.write.Label(7,i, cprdp_list.get(i-3).getTy_num(),      cFormat));
            wsheet.addCell(new jxl.write.Label(8,i, cprdp_list.get(i-3).getBty_num(),      cFormat));
            wsheet.addCell(new jxl.write.Label(9,i, cprdp_list.get(i-3).getQq_num(),      cFormat));
            wsheet.addCell(new jxl.write.Label(10,i, cprdp_list.get(i-3).getSftg(),      cFormat));
                
        } 
        
        wsheet.mergeCells(0, i, 10, i);//合併0到10單元格
        /**
         * lrr 2014-05-24 增 BEGIN
         * 功能描述:增長四行:1.監票人 2.評審委員會主任
         */
        wsheet.addCell(new jxl.write.Label(0,i,"製表人:"+oprator ,cFormat1));//合計列
        i = i+1;
        wsheet.mergeCells(0, i, 10, i+1);//合併兩行並同時合併單元格
        wsheet.addCell(new jxl.write.Label(0,i,"監票人:       " ,cFormat1));//合計列
        i = i+2;
        wsheet.mergeCells(0, i, 10, i+1);//合併兩行並同時合併單元格
        wsheet.addCell(new jxl.write.Label(0,i,"評審委員會主任:       " ,cFormat1));//合計列
        /**
         * lrr 2014-05-24 增 END
         * 功能描述:增長兩行:1.監票人 2.評審委員會主任
         */
        wbook.write();   
        wbook.close();  
        
    } catch (WriteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        //this.cwts("導出失敗,請稍後重試!", response);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        //this.cwts("導出失敗,請稍後重試!", response);
     }finally{  
         try{
             os.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                //this.cwts("導出失敗,請稍後重試!", response);
             }
    }
}    

 

 

2.POIapache

public static void main(String[] args) throws IOException {
        //新建文件輸出流對象
        FileOutputStream out = new FileOutputStream("F:/poitest.xls");
        //新建workbook
        HSSFWorkbook wb = new HSSFWorkbook();
        //新建sheet
        HSSFSheet sheet = wb.createSheet();
        //新建行
        HSSFRow row = sheet.createRow(2);
        //設置行高
        row.setHeightInPoints(20);
        //新建單元格
        HSSFCell cell = row.createCell(2);
        
        //建立整個文本的字體對象,workbook建立
        HSSFFont cnFont = wb.createFont();
        //設置字體行高,字體名字
        cnFont.setFontHeightInPoints((short)10);
        cnFont.setFontName("隸書");
        
        //將文本字面格式用到單元格上,新建單元格風格
        HSSFCellStyle cnStyle = wb.createCellStyle();
        cnStyle.setFont(cnFont);
        cell.setCellStyle(cnStyle);
        
        //單元格內文本對象新建,HSSFRichTextString的應用
        HSSFRichTextString richText = new HSSFRichTextString("中文字體測試");
        cell.setCellValue(richText);
        
        
        //再建一個單元格,重複上面的設置
        HSSFCell enCell = row.createCell(3);
        HSSFFont enFont = wb.createFont();    
        enFont.setFontHeightInPoints((short) 10);    
        enFont.setFontName("Arial Black");    
        HSSFCellStyle enStyle = wb.createCellStyle();    
        enStyle.setFont(enFont);    
        enCell.setCellStyle(enStyle);    
        enCell.setCellValue(new HSSFRichTextString("English font test"));    
        sheet.setColumnWidth(2, 4000);    
        sheet.setColumnWidth(3, 4000); 
        
        //輸出
        //設置邊框
        sheet.setDisplayGridlines(true);
        //設置打印的邊框
        sheet.setPrintGridlines(false);
        
        //設置打印對象
        HSSFPrintSetup printSetup = sheet.getPrintSetup();
        //設置頁邊距
        printSetup.setHeaderMargin((double) 0.44); // 頁眉
        printSetup.setFooterMargin((double) 0.2);//頁腳
        
        //設置頁寬
        printSetup.setFitWidth((short)1); 
        printSetup.setFitHeight((short)1000);
        
        //設置打印方向,橫向就是true
        printSetup.setLandscape(false);
        //設置A4紙
        printSetup.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
        
        //打印,關閉流
        wb.write(out);
        out.close();
        
        System.out.println("ok");
    }
相關文章
相關標籤/搜索