熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

全面挖掘Java Excel API 使用方法

2013-11-15 11:51:22  來源: JSP教程 

  使用Windows操作系統的朋友對Excel(電子表格)一定不會陌生但是要使用Java語言來操縱Excel文件並不是一件容易的事在Web應用日益盛行的今天通過Web來操作Excel文件的需求越來越強烈目前較為流行的操作是在JSP或Servlet 中創建一個CSV (comma separated values)文件並將這個文件以MIMEtext/csv類型返回給浏覽器接著浏覽器調用Excel並且顯示CSV文件這樣只是說可以訪問到Excel文件但是還不能真正的操縱Excel文件本文將給大家一個驚喜向大家介紹一個開放源碼項目Java Excel API使用它大家就可以方便地操縱Excel文件了
  
  Java Excel API簡介
  
  Java Excel是一開放源碼項目通過它Java開發人員可以讀取Excel文件的內容創建新的Excel文件更新已經存在的Excel文件使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表因為是使用Java編寫的所以我們在Web應用中可以通過JSPServlet來調用API實現對Excel數據表的訪問
  
  現在發布的穩定版本是V提供以下功能
  
  從Excel 等格式的文件中讀取數據
  讀取Excel公式(可以讀取Excel 以後的公式)
  生成Excel數據表(格式為Excel
  支持字體數字日期的格式化
  支持單元格的陰影操作以及顏色操作
  修改已經存在的數據表
  
  現在還不支持以下功能但不久就會提供了
  
  不能夠讀取圖表信息
  
  可以讀但是不能生成公式任何類型公式最後的計算值都可以讀出
  
  應用示例
  
  從Excel文件讀取數據表
  
  Java Excel API既可以從本地文件系統的一個文件(xls)也可以從輸入流中讀取Excel數據表讀取Excel數據表的第一步是創建Workbook(術語工作薄)下面的代碼片段舉例說明了應該如何操作(完整代碼見ExcelReadingjava)
  
  import javaio*;
  import jxl*;
  … … … …
  try
  {
  //構建Workbook對象 只讀Workbook對象
  //直接從本地文件創建Workbook
  //從輸入流創建Workbook
  InputStream is = new FileInputStream(sourcefile);
  jxlWorkbook rwb = WorkbookgetWorkbook(is);
  }
  catch (Exception e)
  {
  eprintStackTrace();
  }
  
  一旦創建了Workbook我們就可以通過它來訪問Excel Sheet(術語工作表)參考下面的代碼片段
  
  //獲取第一張Sheet表
  Sheet rs = rwbgetSheet();
  
  我們既可能通過Sheet的名稱來訪問它也可以通過下標來訪問它如果通過下標來訪問的話要注意的一點是下標從開始就像數組一樣
  
  一旦得到了Sheet我們就可以通過它來訪問Excel Cell(術語單元格)參考下面的代碼片段
  
  //獲取第一行第一列的值
  Cell c = rsgetCell( );
  String strc = cgetContents();
  
  //獲取第一行第二列的值
  Cell c = rsgetCell( );
  String strc = cgetContents();
  
  //獲取第二行第二列的值
  Cell c = rsgetCell( );
  String strc = cgetContents();
  
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  
  如果僅僅是取得Cell的值我們可以方便地通過getContents()方法它可以將任何類型的Cell值都作為一個字符串返回示例代碼中Cell( )是文本型Cell( )是數字型Cell()是日期型通過getContents()三種類型的返回值都是字符型
  
  如果有需要知道Cell內容的確切類型API也提供了一系列的方法參考下面的代碼片段
  
  String strc = null;
  double strc = ;
  Date strc = null;
  
  Cell c = rsgetCell( );
  Cell c = rsgetCell( );
  Cell c = rsgetCell( );
  
  if(cgetType() == CellTypeLABEL)
  {
  LabelCell labelc = (LabelCell)c;
  strc = labelcgetString();
  }
  if(cgetType() == CellTypeNUMBER)
  {
  NmberCell numc = (NumberCell)c;
  strc = numcgetvalue();
  }
  if(cgetType() == CellTypeDATE)
  {
  DateCell datec = (DateCell)c;
  strc = datecgetDate();
  }
  
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  Systemoutprintln(Cell( ) + value : + strc + ; type : + cgetType());
  
  在得到Cell對象後通過getType()方法可以獲得該單元格的類型然後與API提供的基本類型相匹配強制轉換成相應的類型最後調用相應的取值方法getXXX()就可以得到確定類型的值API提供了以下基本類型與Excel的數據格式相對應如下圖所示
  
  每種類型的具體意義請參見Java Excel API document.
  
  當你完成對Excel電子表格數據的處理後一定要使用close()方法來關閉先前創建的對象以釋放讀取數據表的過程中所占用的內存空間在讀取大量數據時顯得尤為重要參考如下代碼片段
  
  //操作完成時關閉對象釋放占用的內存空間
  rwbclose();
  
  Java Excel API提供了許多訪問Excel數據表的方法在這裡我只簡要地介紹幾個常用的方法其它的方法請參考附錄中的Java Excel API document.
  
  Workbook類提供的方法
  
   int getNumberOfSheets()
  
  獲得工作薄(Workbook)中工作表(Sheet)的個數示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  int sheets = rwbgetNumberOfSheets();
  
   Sheet[] getSheets()
  
  返回工作薄(Workbook)中工作表(Sheet)對象數組示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  Sheet[] sheets = rwbgetSheets();
  
   String getVersion()
  
  返回正在使用的API的版本號好像是沒什麼太大的作用
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  String apiVersion = rwbgetVersion();
  
  Sheet接口提供的方法
  
  ) String getName()
  
  獲取Sheet的名稱示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  String sheetName = rsgetName();
  
  ) int getColumns()
  
  獲取Sheet表中所包含的總列數示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  int rsColumns = rsgetColumns();
  
  ) Cell[] getColumn(int column)
  
  獲取某一列的所有單元格返回的是單元格對象數組示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  Cell[] cell = rsgetColumn();
  
  ) int getRows()
  
  獲取Sheet表中所包含的總行數示例
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  int rsRows = rsgetRows();
  
  ) Cell[] getRow(int row)
  
  獲取某一行的所有單元格返回的是單元格對象數組示例子
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  Cell[] cell = rsgetRow();
  
  ) Cell getCell(int column int row)
  
  獲取指定單元格的對象引用需要注意的是它的兩個參數第一個是列數第二個是行數這與通常的行列組合有些不同
  
  jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
  jxlSheet rs = rwbgetSheet();
  Cell cell = rsgetCell( );
  
  生成新的Excel工作薄
  
  下面的代碼主要是向大家介紹如何生成簡單的Excel工作表在這裡單元格的內容是不帶任何修飾的(如字體顏色等等)所有的內容都作為字符串寫入(完整代碼見ExcelWritingjava)
  
  與讀取Excel工作表相似首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象這裡要注意的是只能通過API提供的工廠方法來創建Workbook而不能使用WritableWorkbook的構造函數因為類WritableWorkbook的構造函數為protected類型示例代碼片段如下
  
  import javaio*;
  import jxl*;

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19757.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.