java操作Excel、PDF檔案

來源:互聯網
上載者:User
 

java操作Excel、PDF檔案

下面這些是在開發中用到的一些東西,有的代碼貼的不是完整的,只是貼出了關於操作EXCEL的代碼:

jxl是一個*國人寫的java操作excel的工具, 在開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI。其中功能相對POI比較弱一點。但jExcelAPI對中文支援非常好,API是純Java的, 並不依賴Windows系統,即使運行在Linux下,它同樣能夠正確的處理Excel檔案。 另外需要說明的是,這套API對圖形和圖表的支援很有限,而且僅僅識別PNG格式。

使用如下:

搭建環境

將下載後的檔案解包,得到jxl.jar,放入classpath,安裝就完成了。

基本操作

一、建立檔案

擬產生一個名為“test.xls”的Excel檔案,其中第一個工作表被命名為
“第一頁”,大致效果如下:

代碼
  1. package  test;   
  2.   
  3. // 產生Excel的類    
  4. import  java.io.File;   
  5.   
  6. import  jxl.Workbook;   
  7. import  jxl.write.Label;   
  8. import  jxl.write.WritableSheet;   
  9. import  jxl.write.WritableWorkbook;   
  10.   
  11. public   class  CreateExcel   {   
  12.     public   static   void  main(String args[])   {   
  13.         try    {   
  14.             //  開啟檔案    
  15.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ));   
  16.             //  產生名為“第一頁”的工作表,參數0表示這是第一頁    
  17.             WritableSheet sheet  =  book.createSheet( " 第一頁 " ,  0 );   
  18.             //  在Label對象的構造子中指名儲存格位置是第一列第一行(0,0)   
  19.             //  以及儲存格內容為test    
  20.             Label label  =   new  Label( 0 ,  0 ,  " test " );   
  21.   
  22.             //  將定義好的儲存格添加到工作表中    
  23.             sheet.addCell(label);   
  24.   
  25.             /**/ /*   
  26.             * 產生一個儲存數位儲存格 必須使用Number的完整包路徑,否則有文法歧義 儲存格位置是第二列,第一行,值為789.123  
  27.              */    
  28.            jxl.write.Number number  =   new  jxl.write.Number( 1 ,  0 ,  555.12541 );   
  29.            sheet.addCell(number);   
  30.   
  31.             //  寫入資料並關閉檔案    
  32.             book.write();   
  33.            book.close();   
  34.   
  35.        }   catch  (Exception e)   {   
  36.            System.out.println(e);   
  37.        }    
  38.    }    
  39.     

 

編譯執行後,會產生一個Excel檔案。

三、讀取檔案

以剛才我們建立的Excel檔案為例,做一個簡單的讀取操作,程式碼如下:

代碼
  1. package  test;   
  2.   
  3. // 讀取Excel的類    
  4. import  java.io.File;   
  5.   
  6. import  jxl.Cell;   
  7. import  jxl.Sheet;   
  8. import  jxl.Workbook;   
  9.   
  10. public   class  ReadExcel   {   
  11.     public   static   void  main(String args[])   {   
  12.         try    {   
  13.            Workbook book  =  Workbook.getWorkbook( new  File( " test.xls " ));   
  14.             //  獲得第一個工作表對象    
  15.             Sheet sheet  =  book.getSheet( 0 );   
  16.             //  得到第一列第一行的儲存格    
  17.             Cell cell1  =  sheet.getCell( 0 ,  0 );   
  18.            String result  =  cell1.getContents();   
  19.            System.out.println(result);   
  20.            book.close();   
  21.        }   catch  (Exception e)   {   
  22.            System.out.println(e);   
  23.        }    
  24.    }    
  25.     

 

程式執行結果:test

四、修改檔案
利用jExcelAPI可以修改已有的Excel檔案,修改Excel檔案的時候,除了開啟檔案的方式不同之外,
其他動作和建立Excel是一樣的。下面的例子是在我們已經產生的Excel檔案中添加一個工作表:

代碼
  1. package  test;   
  2.   
  3. import  java.io.File;   
  4.   
  5. import  jxl.Workbook;   
  6. import  jxl.write.Label;   
  7. import  jxl.write.WritableSheet;   
  8. import  jxl.write.WritableWorkbook;   
  9.   
  10. public   class  UpdateExcel   {   
  11.     public   static   void  main(String args[])   {   
  12.         try    {   
  13.             //  Excel獲得檔案    
  14.             Workbook wb  =  Workbook.getWorkbook( new  File( " test.xls " ));   
  15.             //  開啟一個檔案的副本,並且指定資料寫回到原檔案    
  16.             WritableWorkbook book  =  Workbook.createWorkbook( new  File( " test.xls " ),   
  17.                    wb);   
  18.             //  添加一個工作表    
  19.             WritableSheet sheet  =  book.createSheet( " 第二頁 " ,  1 );   
  20.            sheet.addCell( new  Label( 0 ,  0 ,  " 第二頁的測試資料 " ));   
  21.            book.write();   
  22.            book.close();   
  23.        }   catch  (Exception e)   {   
  24.            System.out.println(e);   
  25.        }    
  26.    }    
  27.     

 

其他動作

一、 資料格式化

在Excel中不涉及複雜的資料類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。

1、 字串格式化

字串的格式化涉及到的是字型、粗細、字型大小等元素,這些功能主要由WritableFont和
WritableCellFormat類來負責。假設我們在產生一個含有字串的儲存格時,使用如下語句,
為方便敘述,我們為每一行命令加了編號:

代碼
  1. WritableFont font1 =    
  2.  new  WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ①   
  3.   
  4. WritableCellFormat format1 = new  WritableCellFormat(font1); ②   
  5.   
  6. Label label = new  Label( 0 , 0 ,”data  4  test”,format1) ③   
  7.   
  8.   
  9.  其中①指定了字串格式:字型為TIMES,字型大小16,加粗顯示。WritableFont有非常豐富的   
  10. 構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這裡不再列出。   
  11.   
  12. ②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定儲存格的各種   
  13. 屬性,後面的儲存格格式化中會有更多描述。   
  14.   
  15. ③處使用了Label類的構造子,指定了字串被賦予那種格式。   
  16.   
  17. 在WritableCellFormat類中,還有一個很重要的方法是指定資料的對齊,比如針對我們   
  18. 上面的執行個體,可以指定:   
  19.   
  20.   // 把水平對齊指定為置中    
  21.  format1.setAlignment(jxl.format.Alignment.CENTRE);   
  22.   
  23.  // 把垂直對齊指定為置中    
  24.  format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);   


二、儲存格操作

 

Excel中很重要的一部分是對儲存格的操作,比如行高、列寬、儲存格合并等,所幸jExcelAPI
提供了這些支援。這些操作相對比較簡單,下面只介紹一下相關的API。

1、 合併儲存格

代碼
  1. WritableSheet.mergeCells( int  m, int  n, int  p, int  q);    
  2.   
  3. // 作用是從(m,n)到(p,q)的儲存格全部合并,比如:    
  4. WritableSheet sheet = book.createSheet(“第一頁”, 0 );   
  5.   
  6. // 合并第一列第一行到第六列第一行的所有儲存格    
  7. sheet.mergeCells( 0 , 0 , 5 , 0 );   


合并既可以是橫向的,也可以是縱向的。合并後的儲存格不能再次進行合并,否則會觸發異常。

 

2、 行高和列寬

代碼
  1.  WritableSheet.setRowView( int  i, int  height);   
  2.   
  3.  // 作用是指定第i+1行的高度,比如:   
  4.   
  5.  // 將第一行的高度設為200    
  6.  sheet.setRowView( 0 , 200 );   
  7.   
  8. WritableSheet.setColumnView( int  i, int  width);   
  9.   
  10.  // 作用是指定第i+1列的寬度,比如:   
  11.   
  12.  // 將第一列的寬度設為30    
  13.  sheet.setColumnView( 0 , 30 );   
  14.     
  15.    


jExcelAPI還有其他的一些功能,比如插入圖片等,這裡就不再一一介紹,讀者可以自己探索。

 

其中:如果讀一個excel,需要知道它有多少行和多少列,如下操作:

代碼
  1. Workbook book  =  Workbook.getWorkbook( new  File( " 測試1.xls " ));   
  2.         //  獲得第一個工作表對象    
  3.         Sheet sheet  =  book.getSheet( 0 );   
  4.         //  得到第一列第一行的儲存格    
  5.          int  columnum  =  sheet.getColumns(); //  得到列數    
  6.          int  rownum  =  sheet.getRows(); //  得到行數    
  7.         System.out.println(columnum);   
  8.        System.out.println(rownum);   
  9.         for  ( int  i  =   0 ; i  <  rownum; i ++ ) //  迴圈進行讀寫    
  10.            {   
  11.             for  ( int  j  =   0 ; j  <  columnum; j ++ )   {   
  12.                Cell cell1  =  sheet.getCell(j, i);   
  13.                String result  =  cell1.getContents();   
  14.                System.out.print(result);   
  15.                System.out.print( " /t " );   
  16.            }    
  17.            System.out.println();   
  18.        }    
  19.        book.close();    

 

最後更新:2006-10-27 13:44
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.