使用 jxl 實現復雜的excel 表格導出 java代碼


 

1. 使用 jxl 插件 jxl.jar

2. 導出excel 表格

3. java

4.myeclipse

5.mysql

6.ssm

7. 導出的效果

 

圖中紅色部分為從數據庫中獲取的動態數據。

8. 這是我們公司的項目,所以后台代碼中我只粘貼出 excel 代碼。如果不懂得可以聯系我。

QQ:905352007

9. excel 代碼段

public void exportCourseContent(HttpServletRequest request,HttpServletResponse response, List<Outline> list,
			String course_name) {
		WritableWorkbook wwb = null;
        OutputStream os = null;
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            os = response.getOutputStream();// 取得輸出流
            response.reset();// 清空輸出流
            // excel 文件的 MIME 類型
            response.setContentType("application/msexcel");
            //在導出前對名稱根據瀏覽器做下處理
            String agent = request.getHeader("USER-AGENT").toLowerCase();
            response.setContentType("application/vnd.ms-excel");
            //***************很重要
            String fileName = course_name;//文件名中文亂碼
            String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            if (agent.contains("firefox")) {
                response.setCharacterEncoding("utf-8");
                response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xls");
            } else {
                response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
            }

            wwb = jxl.Workbook.createWorkbook(os);
            WritableSheet ws = wwb.createSheet("課程統計", 10); // 創建一個工作表

            // 設置標題單元格的文字格式
            WritableFont titleFont = new WritableFont(WritableFont.createFont("宋體"), 12,
            		WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
            WritableCellFormat titleFontFormat = new WritableCellFormat(titleFont);
            titleFontFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            titleFontFormat.setAlignment(Alignment.CENTRE);
            titleFontFormat.setBackground(Colour.LIGHT_TURQUOISE);
            

            // 設置內容數據單元格的文字格式
            WritableFont cellFont = new WritableFont(WritableFont.createFont("宋體"), 12,
                    WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
            WritableCellFormat cellFontFormat = new WritableCellFormat(cellFont);
            cellFontFormat.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中
            cellFontFormat.setAlignment(Alignment.LEFT);//文字對齊方式
            
            // 設置內容數據單元格的文字格式
            WritableFont cellFont1 = new WritableFont(WritableFont.createFont("宋體"), 12,
                    WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
            WritableCellFormat cellFontFormat1 = new WritableCellFormat(cellFont1);
            cellFontFormat1.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中
            cellFontFormat1.setAlignment(Alignment.CENTRE);//文字對齊方式

            ws.getSettings().setDefaultColumnWidth(18);
            ws.getSettings().setDefaultRowHeight(300);
            
            CellView cellView = new CellView();  
            cellView.setAutosize(true); //設置自動大小  
            /*======= 設置列寬 =====*/ 
            ws.setColumnView(0, 30);//根據內容自動設置列寬 
            ws.setColumnView(1, 30);
            ws.setColumnView(2, 30);
            ws.setColumnView(3, 24);
            ws.setColumnView(4, 24);
            ws.setColumnView(5, 24);
           
            //ws.mergeCells(0, 0, 3, 0);//合並單元格 第一個參數從哪個列開始合並,第二個參數為第幾行,第三個參數為到那一列結束,第四個參數為合並幾行
            /*======= 填充標題 =====*/ 
            ws.addCell(new Label(0, 0, "章名", titleFontFormat));  // 第一個參數為: 第幾列,第二個參數為: 第幾行
            ws.addCell(new Label(1, 0, "節名", titleFontFormat));
            ws.addCell(new Label(2, 0, "單元名", titleFontFormat));
            ws.addCell(new Label(3, 0, "單元序號", titleFontFormat));
            ws.addCell(new Label(4, 0, "單元類型", titleFontFormat));
            ws.addCell(new Label(5, 0, "視頻時長", titleFontFormat));
            
            /*======= 填充內容 =====*/ 
            /** 循環章 */
            Outline outline = null;
            Outline childoutline = null;
            CourseContent content = null;
            List<Outline> childlist = null;
            List<CourseContent> contentlist = null;
            String dan="";
            int oc_count = 0;
            int occ_count = 0;
            int content_count = 0;
            int outline_content_count = 0;
            dan="--";
            //循環章
            for (int i = 0; i < list.size(); i++) {
            	outline = list.get(i);
            	childlist = outline.getChild();
            	oc_count = content_count+1;
            	ws.addCell(new Label(0, content_count+1, "" + outline.getTitle(),cellFontFormat));// 章的內容
                //循環節
                for(int j = 0; j < childlist.size(); j++){
                	childoutline = childlist.get(j);
                	contentlist = childoutline.getContent();
                	occ_count = outline_content_count+1;
                	ws.addCell(new Label(1, outline_content_count+1, "" + childoutline.getTitle(),cellFontFormat));
                	//循環單元
                	if(contentlist==null||contentlist.size()<=0){
                		ws.addCell(new Label(2, outline_content_count+1,dan,cellFontFormat));
                		ws.addCell(new Label(3, outline_content_count+1,dan,cellFontFormat1));
                		ws.addCell(new Label(4, outline_content_count+1,dan,cellFontFormat1));
                		ws.addCell(new Label(5, outline_content_count+1,dan,cellFontFormat1));
                		content_count++;
                		outline_content_count++;
                	}else{
                		for(int k = 0; k < contentlist.size(); k++){
                			content = contentlist.get(k);
                    		ws.addCell(new Label(2, content_count+1,content.getTitle(),cellFontFormat));
                    		ws.addCell(new Label(3, content_count+1,content.getSort()+"",cellFontFormat1));
                    		if(content.getType()!=null){
                    			if(content.getType()==1){
                    				ws.addCell(new Label(4, content_count+1,"視頻",cellFontFormat1));
                    			}else if(content.getType()==2){
                    				ws.addCell(new Label(4, content_count+1,"文檔",cellFontFormat1));
                    			}else{
                    				ws.addCell(new Label(4, content_count+1,"其他",cellFontFormat1));
                    			}
                    		}else{
                    			ws.addCell(new Label(4, content_count+1,"暫無",cellFontFormat1));
                    		}
                    		if(content.getVideo_time()!=null){
                    			ws.addCell(new Label(5, content_count+1,content.getVideo_time()+"",cellFontFormat1));
                    		}else{
                    			ws.addCell(new Label(5, content_count+1,0+"",cellFontFormat1));
                    		}
                    		
                    		content_count++;
                    		outline_content_count++;
                    	}
                	}
                	//合並節單元格
                	ws.mergeCells(1, occ_count, 1, outline_content_count);
                }
                //合並章單元格
                ws.mergeCells(0, oc_count, 0, content_count);
            }
            ws.toString();
            wwb.write();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (wwb != null) {
                    wwb.close();
                }
                if (os != null) {
                    os.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
	}

  10. 當然了,這只是我想到的一種方法,如果有哪個大神有更簡單的方法,歡迎在下方留言!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM