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"); }