jxl生成表格的具體操作


  • import java.io.File;  
  • import java.util.ArrayList;  
  • import java.util.Date;  
  • import java.util.List;  
  •   
  • import jxl.Workbook;  
  • import jxl.format.Alignment;  
  • import jxl.format.Border;  
  • import jxl.format.BorderLineStyle;  
  • import jxl.format.Colour;  
  • import jxl.format.PageOrientation;  
  • import jxl.format.PaperSize;  
  • import jxl.format.UnderlineStyle;  
  • import jxl.format.VerticalAlignment;  
  • import jxl.write.DateFormat;  
  • import jxl.write.DateTime;  
  • import jxl.write.Label;  
  • import jxl.write.Number;  
  • import jxl.write.NumberFormat;  
  • import jxl.write.WritableCellFeatures;  
  • import jxl.write.WritableCellFormat;  
  • import jxl.write.WritableFont;  
  • import jxl.write.WritableImage;  
  • import jxl.write.WritableSheet;  
  • import jxl.write.WritableWorkbook;  
  •   
  • public class JXLClass {  
  •     public static String savePath = "D:"+java.io.File.separator+"saveDir";//文檔所在目錄  
  •       
  •     /** 
  •      * 練習使用JXL生成Excel文件 
  •      */  
  •     public static void main(String[] args) {  
  •          String fileName = System.currentTimeMillis()+".xls";//以當前時間作為Excel的名稱:2003版本的  
  •          String filePath = savePath+ java.io.File.separator + fileName;  
  •         System.out.println("文件路徑:"+filePath);  
  •         File excelFile = new File(filePath);//文件所在具體路徑  
  •           
  •         createExcel(excelFile);  
  •   
  •     }  
  •       
  •     public static void createExcel(File file){  
  •         System.out.println("生成Excel文件開始了!");  
  •         try {  
  •             String[] title={"序號","姓名","年齡","工資","出生日期","婚否","頭像"};//標題數組  
  •               
  •             //1、創建可以寫入的Excel工作簿  
  •             WritableWorkbook workBook = Workbook.createWorkbook(file);  
  •               
  •             //2、創建工作表  
  •             //createSheet(param1,param2):param1為當前工作表名稱,param2表示是第幾張表,從0開始  
  •             WritableSheet sheet = workBook.createSheet("工作表1", 0);//0表示第一張表  
  •             WritableSheet sheet2 = workBook.createSheet("工作表2", 1);  
  •             WritableSheet sheet3 = workBook.createSheet("工作表3", 2);  
  •               
  •             //3、設置打印屬性  
  •             sheet.getSettings().setOrientation(PageOrientation.LANDSCAPE) ;// 設置為橫向打印  
  •             sheet.getSettings().setPaperSize(PaperSize.A4);//設置紙張A4  
  •             sheet.getSettings().setFitHeight(297);//打印區高度  
  •             sheet.getSettings().setFitWidth(210) ;//打印區寬度  
  •             // 設置邊距              
  •             sheet.getSettings().setTopMargin(0.5) ;  
  •             sheet.getSettings().setBottomMargin(0.3) ;  
  •             sheet.getSettings().setLeftMargin(0.1) ;  
  •             sheet.getSettings().setRightMargin(0.1) ;  
  •             //設置頁腳  
  •             sheet.getSettings().getFooter().getCentre().appendPageNumber() ;// 為頁腳添加頁數  
  •             sheet.getSettings().setFooterMargin(0.07) ;// 設置頁腳邊距(下)  
  •              
  •             //4、設置保護,並加密碼 鎖定的Cell才會起作用  
  •             //啟用保護並設置密碼找回,生成的Excel為只讀,在”審閱-更改-撤銷工作表保護“模塊可取消,取消時要求輸入下面設置的密碼  
  •             sheet.getSettings().setProtected(true) ;//啟用保護  
  •             sheet.getSettings().setPassword("123456") ;//設置保護密碼  
  •             // 設置打印標題行  
  •             sheet.getSettings().setPrintHeaders(true) ;// 啟用打印頭信息  
  •               
  •             //5、合並單元格  
  •             //mergeCells(int x,int y,int m,int n):合並單元格,表示將  
  •             //從第x+1列,y+1行到m+1列,n+1行合並 (四個點定義了兩個坐標,左上角和右下角)  
  •             //結果是合並了m-x+1行,n-y+1列,兩者乘積就是合並的單元格數量。  
  •             sheet.mergeCells(0,0,title.length-1,0);//工作表1的第一行合並,顯示標題  
  •             //setRowView(int i,int height); 指定第i行的高度(這個高度好像得是Excel中的20倍,也就是這里設置成200,Excel中高度差不多為10)  
  •             //有三個參數時,第三個參數表示當前行是否隱藏(當第三個參數為true,高度即便再高也顯示不出來。且默認為true)。若是只寫兩個參數,當前會被隱藏  
  •             sheet.setRowView(0,500,false);//第一行為合並性的標題行,第二行開始顯示title中的內容,第三行為文本內容  
  •   
  •             //6、設置標題的樣式  
  •             //WritableFont()參數依次為:字體(宋體、楷體等),大小,字形(常規、加粗等),  
  •             //是否傾斜(true表示傾斜,false表示不傾斜),下划線樣式(這里設置的雙下划線),字體顏色(這里為紅色)  
  •             WritableFont titleFont = new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,  
  •                                 true,UnderlineStyle.DOUBLE,Colour.RED);//字體樣式定義  
  •             WritableCellFormat cellFormatForTitle = new WritableCellFormat(titleFont);//單元格樣式定義  
  •             cellFormatForTitle.setAlignment(jxl.format.Alignment.CENTRE); //設置水平方向對齊方式  
  •             cellFormatForTitle.setVerticalAlignment(VerticalAlignment.CENTRE);//設置垂直方向對齊方式  
  •             cellFormatForTitle.setWrap(true);//是否自動換行  
  •             cellFormatForTitle.setBorder(Border.ALL, BorderLineStyle.THIN);//設置邊框樣式  
  •             cellFormatForTitle.setBackground(Colour.LIGHT_GREEN);//設置背景色  
  •             //cellFormat.setIndentation(2);//設置縮進字符個數  
  •                
  •             //7、為第一行合並的單元格設置標題  
  •             Label lab = new Label(0,0,"JXL練習",cellFormatForTitle);  
  •             //Label(int x,int y,String content,WritableCellFormat wcf):指明單元格的位置和內容,四個參數依次為;第幾列、第幾行、內容、樣式  
  •             sheet.addCell(lab);//將單元格添加到sheet中  
  •               
  •             //8、將title寫到Excel中  
  •             for(int i=0;i<title.length;i++){  
  •                 //setColumnView(int i,int width):指定第i列的寬度  
  •                 sheet.setColumnView(i, 20);//設置單元格的寬度:這個寬度與Excel里面的寬度差不多  
  •                 Label label = new Label(i,1,title[i],cellFormatForTitle);//在第二行中添加文本類單元格  
  •                 sheet.addCell(label);//將標題添加到sheet中  
  •             }  
  •             sheet.setRowView(1,500,false);//標題行行高25  
  •               
  •             //9、設置正文的樣式  
  •             //Arial是一套隨同多套微軟應用軟件所分發的無襯線體TrueType字型  
  •             WritableFont bodyFont = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,  
  •                     false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);//字體樣式定義:ARIAL,12號,不加粗,不傾斜,沒有下划線,黑色  
  •             WritableCellFormat cellFormatForBody = new WritableCellFormat(bodyFont);//單元格樣式定義  
  •             cellFormatForBody.setAlignment(jxl.format.Alignment.CENTRE); //設置水平方向對齊方式  
  •             cellFormatForBody.setVerticalAlignment(VerticalAlignment.CENTRE);//設置垂直方向對齊方式  
  •             cellFormatForBody.setWrap(true);//是否自動換行  
  •             cellFormatForBody.setBorder(Border.ALL, BorderLineStyle.THIN);//設置邊框樣式  
  •             cellFormatForBody.setBackground(Colour.LIGHT_GREEN);//設置背景色  
  •               
  •             //10、給正文添加內容  
  •             //第一列,序號,數字類型,Number():參數依次為:第幾列,第幾行,顯示內容,樣式  
  •             Number number = new Number(0,2,1,cellFormatForBody);  
  •             sheet.addCell(number);  
  •               
  •             //第二列,姓名,基本文字類型  
  •             Label name = new Label(1,2,"張三",cellFormatForBody);  
  •             sheet.addCell(name);  
  •               
  •             //第三列,年齡,數字類型  
  •             Number age = new Number(2,2,10,cellFormatForBody);  
  •             sheet.addCell(age);  
  •               
  •             //第四列,工資,帶有格式的數字類型  
  •             NumberFormat nf = new NumberFormat("#.##");//格式  
  •             WritableCellFormat wcfN = new WritableCellFormat(nf);  
  •             //設置樣式  
  •             wcfN.setAlignment(Alignment.CENTRE); //設置水平方向對齊方式  
  •             wcfN.setVerticalAlignment(VerticalAlignment.CENTRE);//設置垂直方向對齊方式  
  •             wcfN.setWrap(true);//是否自動換行  
  •             wcfN.setBorder(Border.ALL, BorderLineStyle.THIN);//設置邊框樣式  
  •             wcfN.setBackground(Colour.LIGHT_GREEN);//設置背景色  
  •             Number salary = new Number(3,2,3000.1415926,wcfN);  
  •             sheet.addCell(salary);  
  •                   
  •             //第五列,出生日期,時間類型  
  •             DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");//定義時間格式  
  •             WritableCellFormat wcfDF = new WritableCellFormat(df);  
  •             //設置樣式  
  •             wcfDF.setAlignment(Alignment.CENTRE); //設置水平方向對齊方式  
  •             wcfDF.setVerticalAlignment(VerticalAlignment.CENTRE);//設置垂直方向對齊方式  
  •             wcfDF.setWrap(true);//是否自動換行  
  •             wcfDF.setBorder(Border.ALL, BorderLineStyle.THIN);//設置邊框樣式  
  •             wcfDF.setBackground(Colour.LIGHT_GREEN);//設置背景色  
  •             DateTime birthday = new DateTime(4,2,new Date(),wcfDF);  
  •             //添加值  
  •             sheet.addCell(birthday);  
  •               
  •             //第六列,婚否,boolean類型  
  •             //Boolean marry = new Boolean(5, 2, false, cellFormatForBody);  
  •             //sheet.addCell(marry);  
  •             //下拉選的格式,只能從給定的數據中選擇  
  •             Label lblColumn  = new Label(5, 2, "請選擇",cellFormatForBody);//生成一個待選擇的標簽  
  •             WritableCellFeatures wcf2 = new WritableCellFeatures();//待選擇集合對象,這是jxl的對象  
  •             List angerlist = new ArrayList();  
  •             angerlist.add("已婚");  
  •             angerlist.add("未婚");  
  •             wcf2.setDataValidationList(angerlist);//設置jxl對象要選擇的集合  
  •             lblColumn.setCellFeatures(wcf2);//設置到單元格里面去  
  •             sheet.addCell(lblColumn);//加入sheet表格中  
  •                   
  •             //第七列,頭像,圖片類型:只支持png文件  
  •             //WritableImage():參數依次為:第幾列,第幾行,圖片需要占據幾列,圖片需要占據幾行,圖形文件  
  •             System.out.print("圖片路徑:"+(savePath+ java.io.File.separator+"1.png"));  
  •             WritableImage photo=new WritableImage(6,2,1,1,new File(savePath+ java.io.File.separator+"1.png"));  
  •             sheet.addImage(photo);  
  •               
  •             sheet.setRowView(2,400,false);//正文行高20  
  •               
  •             //11、在Excel中寫入數據並關閉文件  
  •             workBook.write();  
  •             workBook.close();  
  •               
  •         } catch (Exception e) {  
  •             e.printStackTrace();  
  •         }  
  •     }  
  • }  
  • 說明:
  • 1、啟用了密碼保護功能,所以生成的Excel不能編輯,Excel2007可以在”審閱-更改-撤銷工作表保護“模塊取消保護,取消時要求輸入下面設置的密碼123456

    1. sheet.getSettings().setProtected(true) ;//啟用保護  
    2. sheet.getSettings().setPassword("123456") ;//設置保護密碼
  • 2、設置行高的問題:
    可以使用setRowView(int i,int height)方法來設置行高
    1. sheet.setRowView(0,500,false);  
    2.  這個方法可以有兩個參數,也可以有三個。
      第一個參數是要設置行高的行,
      第二個參數是設置行高的高度。這個高度大概得設置成Excel里面行高的20倍才能達到相應的效果。
      第三個參數是boolean類型,是否隱藏,默認為隱藏。要是不調用setRowView方法那么當前行不會隱藏,要是調用了且只寫了兩個參數,那么會被隱藏。寫了三個參數時,true為隱藏,false為不隱藏。設置列寬的setColumnView方法跟這個相同。
    3. 3、圖像類型的數據:
    4. WritableImage photo=new WritableImage(6,2,1,1,new File(savePath+ java.io.File.separator+"1.png"));  
    5. 這四個參數分別表示:第幾列,第幾行,圖片需要占據幾列,圖片需要占據幾行,圖形文件。需要注意的是第三和第四兩個參數,它們並不是圖片的像數數值,而是占據幾個單元格的意思。
    6. 標題帶有下拉框的形式:
      1. Label lblColumn  = new Label(5, 2, "請選擇",cellFormatForBody);//生成一個待選擇的標簽  
      2. WritableCellFeatures wcf2 = new WritableCellFeatures();//待選擇集合對象  
      3. List angerlist = new ArrayList();  
      4. angerlist.add("已婚");  
      5. angerlist.add("未婚");  
      6. wcf2.setDataValidationList(angerlist);//設置jxl對象要選擇的集合  
      7. lblColumn.setCellFeatures(wcf2);//設置到單元格里面去  
      8. sheet.addCell(lblColumn);//加入sheet表格中  

  • 免責聲明!

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



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