jackter 发表于 2013-1-28 19:42:58

jxl操作excel文檔

下面是一些利用jxl操作excel的方法,這個class不能直接用,只是一個模板,涉及到一些像是excel存儲格格式,字體,顏色,存儲格大小,文檔名稱之類的一些零星方法...
    /**       * 產生Excel       * @param conn 資料庫連結       * @param form 報價單查詢Form       * @return byte[] excel內容       */    publicbyte[] getExcel(Connection conn, QuotationForm form)    {                  //初始化,字節流            ByteArrayOutputStream baos = new ByteArrayOutputStream();            WritableWorkbook workbook = null;            //引用WritableWorkbook            workbook = Workbook.createWorkbook(baos);            //引用WritableSheet,sheet名            WritableSheet sheet = workbook.createSheet("報價單", 0);                      //設置單元格的寬度            sheet.setColumnView(0, 10);            sheet.setColumnView(1, 12);             sheet.setColumnView(2, 15);            sheet.setColumnView(3, 10);                         //詳細資料字體                        WritableFont detail = new WritableFont(WritableFont.createFont("新細明體"),10,WritableFont.NO_BOLD,false);            WritableCellFormat cellformat = new WritableCellFormat(detail);             //紅色字體            WritableFont redInfo = new WritableFont(WritableFont.createFont("新細明體"),10,WritableFont.NO_BOLD,false, jxl.format.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);            WritableCellFormat redcellformat = new WritableCellFormat(redInfo);            //粉色字體            WritableFont pinkInfo = new WritableFont(WritableFont.createFont("新細明體"),10,WritableFont.NO_BOLD,false,jxl.format.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.PINK);            WritableCellFormat pinkcellformat = new WritableCellFormat(pinkInfo);            //樣式(居中)            cellformat.setAlignment(jxl.format.Alignment.CENTRE);            redcellformat.setAlignment(jxl.format.Alignment.CENTRE);            pinkcellformat.setAlignment(jxl.format.Alignment.CENTRE);            //大標題                     WritableFont title = new WritableFont(WritableFont.createFont("新細明體"), 20, WritableFont.BOLD,false);            WritableCellFormat cellformat_title = new   WritableCellFormat(title);            cellformat_title.setAlignment(Alignment.CENTRE);                        //小標題            WritableFont sub_title = new WritableFont(WritableFont.createFont("新細明體"),12,WritableFont.BOLD,false);            WritableCellFormat cellfornat_subtitle = new WritableCellFormat(sub_title);            cellfornat_subtitle.setAlignment(Alignment.CENTRE);                                    //左對齊            WritableCellFormat cellformat_left = new WritableCellFormat(sub_title);            cellformat_left.setAlignment(Alignment.LEFT);            //右對齊            WritableCellFormat cellformat_right = new WritableCellFormat(detail);            cellformat_right.setAlignment(Alignment.RIGHT);            //存儲格樣式,保留兩位小數            NumberFormat scale2format = new NumberFormat("#0.00");            WritableCellFormat numbercellformat_scale2 = new WritableCellFormat(detail,scale2format);                        numbercellformat_scale2.setAlignment(Alignment.RIGHT);int num = 0;            //表頭            sheet.mergeCells(0, num, 14, num);            sheet.addCell( new jxl.write.Label( 0, num, "報價單查詢", cellformat_title ) ) ;            num ++;            //表頭            sheet.mergeCells(0, num, 14, num);            sheet.addCell(new jxl.write.Label(0, num, "當前查詢條件:", cellformat_left));            num ++;........         //資料(居中對齊)            sheet.addCell(new jxl.write.Label(0, num, form.getQuoid(),cellformat));          //右對齊          sheet.addCell(new jxl.write.Number(1, num, Integer.parseInt(quom), cellformat_right));          //保留兩位小數點的數字存儲格          sheet.addCell(new jxl.write.Number(5, num, Double.valueOf(avgm).doubleValue(), numbercellformat_scale2));          //粉紅色文字的存儲格          sheet.addCell(new jxl.write.Label(9, ++ num, stonename, pinkcellformat));          //寫入            workbook.write();            //關閉            workbook.close();            //傳回            return baos.toByteArray();   }

加下下面這段JSP代碼就完整了,你要作的就是修改一下上面那個java類的具體內容,直接調用下面這個jsp就可以了
<%--//2008/08/20Jackter 加入國際化支援/** * <P> Title:匯出excel          </P>* <P> Description:匯出excel            </P>* <P> Copyright:Copyright (c) 2008/08/11</P>* <P> Company:Everunion Tech. Ltd.             </P>* @author Jackter         * @version 0.2Original Design from design document.*/ --%><%@page contentType="application/octet-stream; charset=UTF-8"%><%@page import="java.sql.*,java.lang.*,java.text.*,java.util.*,java.io.*"%><%         //緩存不清除(否則文件址直接開啟時會出現找不到文件的例外,不可省略)    response.setHeader("Pragma", "cache"); response.setHeader("Cache-Control", "cache"); //response.setHeader("Pragma", "no-cache"); //response.setHeader("Cache-Control", "no-cache"); //取得語言環境 String ctylgn = ((Locale)session.getAttribute("org.apache.struts.action.LOCALE")).toString(); String alertMes = ""; //如果是繁體中文 if ( "zh_TW".equals(ctylgn) ) alertMes = "此檔案已刪除!"; //如果是簡體中文 else if ( "zh_CN".equals(ctylgn) ) alertMes = "此档案已删除!"; //如果是英文 else if ( "en".equals(ctylgn) ) alertMes = "This file has been deleted!";//取得文件名 String filename = (String)request.getAttribute("filename");//設定頭部 response.setContentType("application/octet-stream"); //設定下載檔案名稱 response.addHeader("Content-Disposition", "attachment;filename="+ new String(filename.getBytes(), "ISO-8859-1")); //取得流物件 byte[] data = (byte[])request.getAttribute("ExcelDATA"); ByteArrayInputStream in = new ByteArrayInputStream(data);try {   //建立流傳輸物件java.io.OutputStream os= response.getOutputStream();//輸出int read = -1;byte buf[] = new byte;int k = 0; //寫入while ( (read = ((InputStream)in).read(buf)) != -1 ){os.write(buf, 0, read);} //寫入 os.flush(); }//例外catch ( Exception e ){e.printStackTrace();System.out.println(alertMes);}//關閉finally   {   //關閉//os.flush();//os.close();in.close();in = null;//此段程式用於防止程式拋出"getOutputStream() has already been called for this response"例外 response.flushBuffer(); out.clear(); out = pageContext.pushBody();}%>

下面附上jxl.jar包。
页: [1]
查看完整版本: jxl操作excel文檔