利用Java導入並操作 Microsoft Excel 文檔

     JExcel 是一個API, 支持從Java應用程序中操作Excel工作表、工作薄等。JExcel API 是自2003年以來出現的一個穩定的開放源代碼產品。

     API 簡單易操作而且功能強大。除了基本功能如讀取,輸入,修改Excel 表之外,它還提供了更爲複雜的功能如讀取和輸入公式,支持字體、數字、日期的格式化,支持單元格的陰影,嵌入以及顏色的操作,複製圖表,支持插入和複製圖像到Excel表格中。

  JExcelApi 主頁:http://jexcelapi.sourceforge.net/.

  JExcelApi JAR, jxl.jar下載:http://www.java2s.com/Code/JarDownload/jxl.jar.zip.

  如何應用 API

  不用大費周章的,在這裏我舉出兩個簡單的例子。 第一個例子會展示如何1)導入一個Excel表2)讀取並操作它的數據。第二個例子會展示如何導出電子表格到客戶端。

  示例1:導入和操作Excel 表

  爲了簡化文件訪問操作,我決定在我所舉的例子中使用的Struts。

  以下表格將被導入例子中,修改,然後返回客戶端。


  

1. 建立文件上傳表

  第一步是建立一個JSP, 能允許客戶端選擇表格上傳到服務器(見列表1)。

  列表 1: Excel 文件上傳表格

< %@ taglib uri="/WEB-INF/tlds/struts-html.tld"

 Struts < html:file> 標籤允許你編輯數據org.apache.struts.upload.FormFile(見第二步)

  表格內容類型"multipart/form-data" 是用來提交包括非ASCII數據和二進制數據的文件。

  2. 創建Struts Action 表(Struts Action Form)

  第二步是創建一個可以容納上傳文件的Action Form(見列表2)

  列表 2: Struts上傳表格功能表

  

package test.excel.form;

  import org.apache.struts.action.*;

  import org.apache.struts.upload.FormFile;

  public class StrutsUploadForm extends ActionForm {

  private FormFile excelFile;

  public FormFile getExcelFile() {

  return excelFile;

  }

  public void setExcelFile(FormFile excelFile) {

  this.excelFile = excelFile;

  }

  }

  3. Struts Action 代碼(Struts Action Code)

 

  Struts action 會有一個代碼從StrutsUploadForm 功能表中得到文件,檢查content type並且通過文件的輸入流到達Workbook class。Workbook是代表了一個工作薄的JExcelApi class。這個種類包括各種各樣的工廠方法(factory methods並且提供了多種可以提供工作表入徑的accessors(見列表3)。

  列表 3: Excerpt from ExcelUploadAction.java struts action class 從ExcelUploadAction.java struts action class摘錄

  

      ...

  StrutsUploadForm uploadForm = (StrutsUploadForm)form;;

  FormFile myFile = uploadForm.getExcelFile();

  Workbook workbook =

  Workbook.getWorkbook(myFile.getInputStream());

  ...

 

現在你可以把工作表加進Workbook class,你就可以開始遍歷其行。以下的代碼將會從工作簿中得到第一個工作表,還有很多行和列並且重複每一行,顯示每格的內容。(見列表4)
  

Listing 4: 從ExcelUploadAction.java struts action class摘錄

  

      ...

  Sheet sheet = workbook.getSheet(0);

  int numberOfRows = sheet.getRows();

  int numberOfColumns = sheet.getColumns();

  for (int row = 0; row < numberOfRows; row ++ ) {

  for (int column = 0; column < numberOfColumns; column ++ ) {

  Cell cell = sheet.getCell(column,row);

  System.out.print(cell.getContents() + " | ");

  }

  System.out.println();

  }

  ...

  在以下的代碼片段中,你會在列名“Age”下獲取所有價值並且計算平均年齡(見列表5)。

 

  列表 5: 在Java 中計算平均年齡

  

      ...

  LabelCell labelCell = sheet.findLabelCell("Age");

  int ageColumnNumber = labelCell.getColumn();

  double ageSum = 0;

  for (int row = 1; row < numberOfRows; row ++ ) {

  Cell cell = sheet.getCell(ageColumnNumber,row);

  if (CellType.NUMBER.equals(cell.getType())){

  ageSum = ageSum + Integer.parseInt(cell.getContents());

  }

  }

  double averageAge = ageSum / (numberOfRows - 1);

  System.out.println("Sum Age : " + ageSum);

  System.out.println("Average Age : " + averageAge);

  ...

  示例2: 從Servlet輸出一個Excel文件

 

  在這個例子中,你會創建一個Excel 表並且把它交回到瀏覽器。

  在以下的例子中你將會看到,用JExcelApi創建一個Excel表是一件非常簡單的流程。在你用的doPost()方法中,設置HTTP Response content type到"ms-excel" 並且設置Content-Disposition 到"attachment",然後提供附件名稱(見列表6)。

  列表 6: 從Servlet輸出一個Excel文件

  

      ...

  response.setContentType("application/vnd.ms-excel");

  response.setHeader("Content-Disposition",

  "attachment; filename=sampleName.xls");

  WritableWorkbook writableWorkbook =

  Workbook.createWorkbook(response.getOutputStream());

  WritableSheet writableSheet =

  writableWorkbook.createSheet("Demo", 0);

  writableSheet.addCell(new Label(0, 0, "Hello World"));

  writableWorkbook.write();

  writableWorkbook.close();

  ...

  這個示例展示出創建一個電子錶"sampleName.xls"其中包括一個工作表,這個工作表中又包括了在A1格中有"Hello World"文本。

 

 

 

  prefix="html"%>

  < html>

  < head>

  < title>Struts File Upload< /title>

  < html:base />

  < /head>

  < html:form action="/uploadExcel" method="post"

  enctype="multipart/form-data">

  < table>

  < tr>

  < td align="left" colspan="3">< font color="red">

  < html:errors />< /font>

  < /td>

  < /tr>

  < tr>

  < td align="right">Select Microsoft Excel File : < /td>

  < td>

  < html:file property="excelFile"/>

  < /td>

  < td>

  < html:submit>Upload File< /html:submit>

  < /td>

  < /tr>

  < /table>

  < /html:form>

  < /body>

  < /html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章