1. 程式人生 > >jxl匯出excel(合併單元格)

jxl匯出excel(合併單元格)

Demo

  1. import java.io.*;   
  2. import jxl.*;   
  3. import jxl.format.UnderlineStyle;  
  4. import jxl.write.*;   
  5. publicclass CreateXLS {   
  6.     publicstaticvoid main(String args[]) {   
  7.         try {   
  8.             //開啟檔案
  9.             WritableWorkbook book= Workbook.createWorkbook(new File("測試.xls"));   
  10.             //生成名為“第一頁”的工作表,引數0表示這是第一頁 
  11.             WritableSheet sheetOne=book.createSheet("第一頁",0);   
  12.             /** 
  13.              * 定義單元格樣式 
  14.              */
  15.             WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 11,  
  16.                     WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,  
  17.                     jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
  18.             WritableFont wf_head = new WritableFont(WritableFont.ARIAL, 11,  
  19.                     WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,  
  20.                     jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
  21.             WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 11,  
  22.                     WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,  
  23.                     jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
  24.             WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 單元格定義
  25.             wcf_title.setBackground(jxl.format.Colour.WHITE); // 設定單元格的背景顏色
  26.             wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
  27.             wcf_title.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
  28.             WritableCellFormat wcf_title1 = new WritableCellFormat(wf_title); // 單元格定義
  29.             wcf_title1.setBackground(jxl.format.Colour.LIGHT_GREEN); // 設定單元格的背景顏色
  30.             wcf_title1.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
  31.             wcf_title1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
  32.             WritableCellFormat wcf_title2 = new WritableCellFormat(wf_title); // 單元格定義
  33.             wcf_title2.setBackground(jxl.format.Colour.YELLOW2); // 設定單元格的背景顏色
  34.             wcf_title2.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
  35.             wcf_title2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
  36.             WritableCellFormat wcf_head1 = new WritableCellFormat(wf_head);   
  37.             wcf_head1.setBackground(jxl.format.Colour.LIGHT_GREEN);  
  38.             wcf_head1.setAlignment(jxl.format.Alignment.CENTRE);   
  39.             wcf_head1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);   
  40.             WritableCellFormat wcf_head2 = new WritableCellFormat(wf_head);   
  41.             wcf_head2.setBackground(jxl.format.Colour.YELLOW2);  
  42.             wcf_head2.setAlignment(jxl.format.Alignment.CENTRE);   
  43.             wcf_head2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);   
  44.             WritableCellFormat wcf_table1 = new WritableCellFormat(wf_table);   
  45.             wcf_table1.setBackground(jxl.format.Colour.LIGHT_GREEN);   
  46.             wcf_table1.setAlignment(jxl.format.Alignment.CENTRE);   
  47.             wcf_table1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);   
  48.             WritableCellFormat wcf_table2 = new WritableCellFormat(wf_table);   
  49.             wcf_table2.setBackground(jxl.format.Colour.YELLOW2);   
  50.             wcf_table2.setAlignment(jxl.format.Alignment.CENTRE);   
  51.             wcf_table2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);   
  52.             sheetOne.setColumnView(015); // 設定列的寬度
  53.             sheetOne.setColumnView(115); // 設定列的寬度
  54.             sheetOne.setColumnView(215); // 設定列的寬度
  55.             sheetOne.setColumnView(315); // 設定列的寬度
  56.             sheetOne.setColumnView(415); // 設定列的寬度
  57.             sheetOne.setColumnView(515); // 設定列的寬度
  58.             sheetOne.setColumnView(615); // 設定列的寬度
  59.             sheetOne.setColumnView(715); // 設定列的寬度
  60.             sheetOne.setColumnView(815); // 設定列的寬度
  61.             sheetOne.setColumnView(915); // 設定列的寬度
  62.             sheetOne.setColumnView(1015); // 設定列的寬度
  63.             sheetOne.setColumnView(1115); // 設定列的寬度
  64.             sheetOne.setColumnView(1215); // 設定列的寬度
  65.             sheetOne.setColumnView(1315); // 設定列的寬度
  66.             //在Label物件的構造子中指名單元格位置是第一列第一行(0,0) 
  67.             //以及單元格內容為test 
  68.             Label title=new Label(0,0,"統計",wcf_title);  
  69.             Label titleOne=new Label(0,1,"統計1",wcf_title1);  
  70.             Label titleTwo=new Label(2,1,"統計2",wcf_title2);  
  71.             Label column1=new Label(0,2,"姓名",wcf_head1);  
  72.             Label column2=new Label(1,2,"所選課程",wcf_head1);  
  73.             Label column3=new Label(2,2,"姓名",wcf_head2);  
  74.             Label column4=new Label(3,2,"所選課程",wcf_head2);  
  75.             //或者WritableCell cell =  new jxl.write.Number(column, row, value, wcf)
  76.             //將定義好的單元格新增到工作表中 
  77.             sheetOne.addCell(title);   
  78.             sheetOne.addCell(titleOne);   
  79.             sheetOne.addCell(titleTwo);   
  80.             sheetOne.addCell(column1);   
  81.             sheetOne.addCell(column2);   
  82.             sheetOne.addCell(column3);   
  83.             sheetOne.addCell(column4);   
  84.   ws.mergeCells(0, 0, 0, 1);//合併單元格,第一個引數:要合併的單元格最左上角的列號,第二個引數:要合併的單元格最左上角的行號,第三個引數:要合併的單元格最右角的列號,第四個引數:要合併的單元格最右下角的行號,
  85.             //合: 第1列第1行  到 第13列第1行
  86.             sheetOne.mergeCells(0030);   
  87.             sheetOne.mergeCells(0111);   
  88.             sheetOne.mergeCells(2131);   
  89.             /*動態資料   */
  90.             Label content1=new Label(0,3,"張三",wcf_table1);  
  91.             Label content2=new Label(0,4,"張三",wcf_table1);  
  92.             Label content3=new Label(0,5,"張三",wcf_table1);  
  93.             Label kecheg1=new Label(1,3,"語文",wcf_table1);  
  94.             Label kecheg2=new Label(1,4,"數學",wcf_table1);  
  95.             Label kecheg3=new Label(1,5,"英語",wcf_table1);  
  96.             sheetOne.addCell(content1);  
  97.             sheetOne.addCell(content2);  
  98.             sheetOne.addCell(content3);  
  99.             sheetOne.addCell(kecheg1);  
  100.             sheetOne.addCell(kecheg2);  
  101.             sheetOne.addCell(kecheg3);  
  102.             sheetOne.mergeCells(0302+3);   
  103.             Label content11=new Label(2,3,"李四",wcf_table2);  
  104.             Label content22=new Label(2,4,"李四",wcf_table2);  
  105.             Label content33=new Label(2,5,"李四",wcf_table2);  
  106.             Label kecheg11=new Label(3,3,"語文",wcf_table2);  
  107.             Label kecheg22=new Label(3,4,"數學",wcf_table2);  
  108.             Label kecheg33=new Label(3,5,"英語",wcf_table2);  
  109.             sheetOne.addCell(content11);  
  110.             sheetOne.addCell(content22);  
  111.             sheetOne.addCell(content33);  
  112.             sheetOne.addCell(kecheg11);  
  113.             sheetOne.addCell(kecheg22);  
  114.             sheetOne.addCell(kecheg33);  
  115.             sheetOne.mergeCells(2322+3);   
  116.             //寫入資料並關閉檔案 
  117.             book.write();   
  118.             book.close();   
  119.         }catch(Exception e){   
  120.             System.out.println(e);   
  121.         }   
  122.     }   
  123. }   

其他程式碼參考

  1. publicvoid createZJData(List<CountVO> zjList,WritableSheet sheet) throws RowsExceededException, WriteException {  
  2.     //(為合併做準備)在運階段有多少個子系統
  3.     for (int j = 0; j < zjList.size(); j++) {  
  4.         if(zjSonSysList.get(zjList.get(j).getNumber3()) != null){  
  5.             zjSonSysList.get(zjList.get(j).getNumber3()).add(zjList.get(j));  
  6.         }else{  
  7.             List<CountVO> vos = new ArrayList<CountVO>();  
  8.             vos.add(zjList.get(j));  
  9.             zjSonSysList.put(zjList.get(j).getNumber3(), vos);  
  10.         }  
  11.     }  
  12.     //動態生成資料
  13.     if(zjSonSysList != null && zjSonSysList.size() > 0){  
  14.         for (Iterator iter = zjSonSysList.entrySet().iterator(); iter.hasNext();){  
  15.             Entry entry = (Entry) iter.next();    
  16.             String key = (String) entry.getKey();  
  17.             List<CountVO> sonSysVO = (List<CountVO>) entry.getValue();  
  18.             for (int t = 0; t < sonSysVO.size(); t++) {  
  19.                 Label content1=new Label(7,zjEndNum+t,sonSysVO.get(t).getNumber1(),wcf_table2);  
  20.                 Label content2=new Label(8,zjEndNum+t,sonSysVO.get(t).getNumber2(),wcf_table2);  
  21.                 Label content3=new Label(9,zjEndNum+t,sonSysVO.get(t).getNumber3(),wcf_table2);  
  22.                 Label content4=new Label(10,zjEndNum+t,sonSysVO.get(t).getNumber4(),wcf_table2);  
  23.                 Label content5=new Label(11,zjEndNum+t,sonSysVO.get(t).getNumber5(),wcf_table2);  
  24.                 Label content6=new Label(12,zjEndNum+t,sonSysVO.get(t).getNumber6(),wcf_table2);  
  25.                 Label mk=new Label(13,zjEndNum+t,sonSysVO.get(t).getNumber7(),wcf_table2);  
  26.                 sheet.addCell(content1);  
  27.                 sheet.addCell(content2);  
  28.                 sheet.addCell(content3);  
  29.                 sheet.addCell(content4);  
  30.                 sheet.addCell(content5);  
  31.                 sheet.addCell(content6);  
  32.                 sheet.addCell(mk);  
  33.                 if(t == (sonSysVO.size() - 1)){  
  34.                     zjEndNum = zjEndNum+t+1;  
  35.                 }else{  
  36.                     zjEndNum = zjEndNum+t;    
  37.                 }  
  38.             }  
  39.             int offer = sonSysVO.size();  
  40.             //合併: 第1列第1行  到 第13列第1行
  41.             sheet.mergeCells(7, zjEndNum-offer, 7, zjEndNum-1);   
  42.             sheet.mergeCells(8, zjEndNum-offer, 8, zjEndNum-1);   
  43.             sheet.mergeCells(9, zjEndNum-offer, 9, zjEndNum-1);   
  44.             sheet.mergeCells(10, zjEndNum-offer, 10, zjEndNum-1);   
  45.             sheet.mergeCells(11, zjEndNum-offer, 11, zjEndNum-1);   
  46.             sheet.mergeCells(12, zjEndNum-offer, 12, zjEndNum-1);  
  47.         }  
  48.     }  
  49.     //使用完畢後恢復,供下一個型別sheet使用
  50.     zjEndNum = 3;  
  51.     zjSonSysList.clear();  
  52.     zjList.clear();  
  53. }  

自定義背景色方法getNearestColour("#99cc00")

  1. publicstatic Colour getNearestColour(String strColor) {    
  2.        Color cl = Color.decode(strColor);    
  3.        Colour color = null;    
  4.        Colour[] colors = Colour.getAllColours();    
  5.        if ((colors != null) && (colors.length > 0)) {    
  6.           Colour crtColor = null;    
  7.           int[] rgb = null;    
  8.           int diff = 0;    
  9.           int minDiff = 999;    
  10.           for (int i = 0; i < colors.length; i++) {    
  11.                crtColor = colors[i];    
  12.                rgb = newint[3];    
  13.                rgb[0] = crtColor.getDefaultRGB().getRed();    
  14.                rgb[1] = crtColor.getDefaultRGB().getGreen();    
  15.                rgb[2] = crtColor.getDefaultRGB().getBlue();    
  16.                diff = Math.abs(rgb[0] - cl.getRed())    
  17.                  + Math.abs(rgb[1] - cl.getGreen())    
  18.                  + Math.abs(rgb[2] - cl.getBlue());    
  19.                if (diff < minDiff) {    
  20.                 minDiff = diff;    
  21.                 color = crtColor;    
  22.                }    
  23.           }    
  24.        }    
  25.        if (color == null)    
  26.           color = Colour.BLACK;    
  27.        return color;    
  28.    }