jxl匯出excel(合併單元格)
阿新 • • 發佈:2019-01-28
Demo
- import java.io.*;
- import jxl.*;
- import jxl.format.UnderlineStyle;
- import jxl.write.*;
- publicclass CreateXLS {
- publicstaticvoid main(String args[]) {
- try {
- //開啟檔案
- WritableWorkbook book= Workbook.createWorkbook(new File("測試.xls"));
- //生成名為“第一頁”的工作表,引數0表示這是第一頁
- WritableSheet sheetOne=book.createSheet("第一頁",0);
- /**
- * 定義單元格樣式
- */
- WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 11,
- WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
- jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
- WritableFont wf_head = new WritableFont(WritableFont.ARIAL, 11,
- WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
- jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
- WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 11,
- WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
- jxl.format.Colour.BLACK); // 定義格式 字型 下劃線 斜體 粗體 顏色
- WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 單元格定義
- wcf_title.setBackground(jxl.format.Colour.WHITE); // 設定單元格的背景顏色
- wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
- wcf_title.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
- WritableCellFormat wcf_title1 = new WritableCellFormat(wf_title); // 單元格定義
- wcf_title1.setBackground(jxl.format.Colour.LIGHT_GREEN); // 設定單元格的背景顏色
- wcf_title1.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
- wcf_title1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
- WritableCellFormat wcf_title2 = new WritableCellFormat(wf_title); // 單元格定義
- wcf_title2.setBackground(jxl.format.Colour.YELLOW2); // 設定單元格的背景顏色
- wcf_title2.setAlignment(jxl.format.Alignment.CENTRE); // 設定對齊方式
- wcf_title2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //設定邊框
- WritableCellFormat wcf_head1 = new WritableCellFormat(wf_head);
- wcf_head1.setBackground(jxl.format.Colour.LIGHT_GREEN);
- wcf_head1.setAlignment(jxl.format.Alignment.CENTRE);
- wcf_head1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);
- WritableCellFormat wcf_head2 = new WritableCellFormat(wf_head);
- wcf_head2.setBackground(jxl.format.Colour.YELLOW2);
- wcf_head2.setAlignment(jxl.format.Alignment.CENTRE);
- wcf_head2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);
- WritableCellFormat wcf_table1 = new WritableCellFormat(wf_table);
- wcf_table1.setBackground(jxl.format.Colour.LIGHT_GREEN);
- wcf_table1.setAlignment(jxl.format.Alignment.CENTRE);
- wcf_table1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);
- WritableCellFormat wcf_table2 = new WritableCellFormat(wf_table);
- wcf_table2.setBackground(jxl.format.Colour.YELLOW2);
- wcf_table2.setAlignment(jxl.format.Alignment.CENTRE);
- wcf_table2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK);
- sheetOne.setColumnView(0, 15); // 設定列的寬度
- sheetOne.setColumnView(1, 15); // 設定列的寬度
- sheetOne.setColumnView(2, 15); // 設定列的寬度
- sheetOne.setColumnView(3, 15); // 設定列的寬度
- sheetOne.setColumnView(4, 15); // 設定列的寬度
- sheetOne.setColumnView(5, 15); // 設定列的寬度
- sheetOne.setColumnView(6, 15); // 設定列的寬度
- sheetOne.setColumnView(7, 15); // 設定列的寬度
- sheetOne.setColumnView(8, 15); // 設定列的寬度
- sheetOne.setColumnView(9, 15); // 設定列的寬度
- sheetOne.setColumnView(10, 15); // 設定列的寬度
- sheetOne.setColumnView(11, 15); // 設定列的寬度
- sheetOne.setColumnView(12, 15); // 設定列的寬度
- sheetOne.setColumnView(13, 15); // 設定列的寬度
- //在Label物件的構造子中指名單元格位置是第一列第一行(0,0)
- //以及單元格內容為test
- Label title=new Label(0,0,"統計",wcf_title);
- Label titleOne=new Label(0,1,"統計1",wcf_title1);
- Label titleTwo=new Label(2,1,"統計2",wcf_title2);
- Label column1=new Label(0,2,"姓名",wcf_head1);
- Label column2=new Label(1,2,"所選課程",wcf_head1);
- Label column3=new Label(2,2,"姓名",wcf_head2);
- Label column4=new Label(3,2,"所選課程",wcf_head2);
- //或者WritableCell cell = new jxl.write.Number(column, row, value, wcf)
- //將定義好的單元格新增到工作表中
- sheetOne.addCell(title);
- sheetOne.addCell(titleOne);
- sheetOne.addCell(titleTwo);
- sheetOne.addCell(column1);
- sheetOne.addCell(column2);
- sheetOne.addCell(column3);
- sheetOne.addCell(column4);
- ws.mergeCells(0, 0, 0, 1);//合併單元格,第一個引數:要合併的單元格最左上角的列號,第二個引數:要合併的單元格最左上角的行號,第三個引數:要合併的單元格最右角的列號,第四個引數:要合併的單元格最右下角的行號,
- //合: 第1列第1行 到 第13列第1行
- sheetOne.mergeCells(0, 0, 3, 0);
- sheetOne.mergeCells(0, 1, 1, 1);
- sheetOne.mergeCells(2, 1, 3, 1);
- /*動態資料 */
- Label content1=new Label(0,3,"張三",wcf_table1);
- Label content2=new Label(0,4,"張三",wcf_table1);
- Label content3=new Label(0,5,"張三",wcf_table1);
- Label kecheg1=new Label(1,3,"語文",wcf_table1);
- Label kecheg2=new Label(1,4,"數學",wcf_table1);
- Label kecheg3=new Label(1,5,"英語",wcf_table1);
- sheetOne.addCell(content1);
- sheetOne.addCell(content2);
- sheetOne.addCell(content3);
- sheetOne.addCell(kecheg1);
- sheetOne.addCell(kecheg2);
- sheetOne.addCell(kecheg3);
- sheetOne.mergeCells(0, 3, 0, 2+3);
- Label content11=new Label(2,3,"李四",wcf_table2);
- Label content22=new Label(2,4,"李四",wcf_table2);
- Label content33=new Label(2,5,"李四",wcf_table2);
- Label kecheg11=new Label(3,3,"語文",wcf_table2);
- Label kecheg22=new Label(3,4,"數學",wcf_table2);
- Label kecheg33=new Label(3,5,"英語",wcf_table2);
- sheetOne.addCell(content11);
- sheetOne.addCell(content22);
- sheetOne.addCell(content33);
- sheetOne.addCell(kecheg11);
- sheetOne.addCell(kecheg22);
- sheetOne.addCell(kecheg33);
- sheetOne.mergeCells(2, 3, 2, 2+3);
- //寫入資料並關閉檔案
- book.write();
- book.close();
- }catch(Exception e){
- System.out.println(e);
- }
- }
- }
其他程式碼參考
- publicvoid createZJData(List<CountVO> zjList,WritableSheet sheet) throws RowsExceededException, WriteException {
- //(為合併做準備)在運階段有多少個子系統
- for (int j = 0; j < zjList.size(); j++) {
- if(zjSonSysList.get(zjList.get(j).getNumber3()) != null){
- zjSonSysList.get(zjList.get(j).getNumber3()).add(zjList.get(j));
- }else{
- List<CountVO> vos = new ArrayList<CountVO>();
- vos.add(zjList.get(j));
- zjSonSysList.put(zjList.get(j).getNumber3(), vos);
- }
- }
- //動態生成資料
- if(zjSonSysList != null && zjSonSysList.size() > 0){
- for (Iterator iter = zjSonSysList.entrySet().iterator(); iter.hasNext();){
- Entry entry = (Entry) iter.next();
- String key = (String) entry.getKey();
- List<CountVO> sonSysVO = (List<CountVO>) entry.getValue();
- for (int t = 0; t < sonSysVO.size(); t++) {
- Label content1=new Label(7,zjEndNum+t,sonSysVO.get(t).getNumber1(),wcf_table2);
- Label content2=new Label(8,zjEndNum+t,sonSysVO.get(t).getNumber2(),wcf_table2);
- Label content3=new Label(9,zjEndNum+t,sonSysVO.get(t).getNumber3(),wcf_table2);
- Label content4=new Label(10,zjEndNum+t,sonSysVO.get(t).getNumber4(),wcf_table2);
- Label content5=new Label(11,zjEndNum+t,sonSysVO.get(t).getNumber5(),wcf_table2);
- Label content6=new Label(12,zjEndNum+t,sonSysVO.get(t).getNumber6(),wcf_table2);
- Label mk=new Label(13,zjEndNum+t,sonSysVO.get(t).getNumber7(),wcf_table2);
- sheet.addCell(content1);
- sheet.addCell(content2);
- sheet.addCell(content3);
- sheet.addCell(content4);
- sheet.addCell(content5);
- sheet.addCell(content6);
- sheet.addCell(mk);
- if(t == (sonSysVO.size() - 1)){
- zjEndNum = zjEndNum+t+1;
- }else{
- zjEndNum = zjEndNum+t;
- }
- }
- int offer = sonSysVO.size();
- //合併: 第1列第1行 到 第13列第1行
- sheet.mergeCells(7, zjEndNum-offer, 7, zjEndNum-1);
- sheet.mergeCells(8, zjEndNum-offer, 8, zjEndNum-1);
- sheet.mergeCells(9, zjEndNum-offer, 9, zjEndNum-1);
- sheet.mergeCells(10, zjEndNum-offer, 10, zjEndNum-1);
- sheet.mergeCells(11, zjEndNum-offer, 11, zjEndNum-1);
- sheet.mergeCells(12, zjEndNum-offer, 12, zjEndNum-1);
- }
- }
- //使用完畢後恢復,供下一個型別sheet使用
- zjEndNum = 3;
- zjSonSysList.clear();
- zjList.clear();
- }
自定義背景色方法getNearestColour("#99cc00")
- publicstatic Colour getNearestColour(String strColor) {
- Color cl = Color.decode(strColor);
- Colour color = null;
- Colour[] colors = Colour.getAllColours();
- if ((colors != null) && (colors.length > 0)) {
- Colour crtColor = null;
- int[] rgb = null;
- int diff = 0;
- int minDiff = 999;
- for (int i = 0; i < colors.length; i++) {
- crtColor = colors[i];
- rgb = newint[3];
- rgb[0] = crtColor.getDefaultRGB().getRed();
- rgb[1] = crtColor.getDefaultRGB().getGreen();
- rgb[2] = crtColor.getDefaultRGB().getBlue();
- diff = Math.abs(rgb[0] - cl.getRed())
- + Math.abs(rgb[1] - cl.getGreen())
- + Math.abs(rgb[2] - cl.getBlue());
- if (diff < minDiff) {
- minDiff = diff;
- color = crtColor;
- }
- }
- }
- if (color == null)
- color = Colour.BLACK;
- return color;
- }