利用Java导入并操作 Microsoft Excel 文档

 JExcel 是一个API, 支持从Java应用程序中操作Excel工作表、工作薄等。JExcel API 是自2003年以来出现的一个稳定的开放源代码产品。

  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。

  以下表格将被导入例子中,修改,然后返回客户端。

  利用Java导入并操作 Microsoft Excel 文档

  1. 建立文件上传表

  第一步是建立一个JSP, 能允许客户端选择表格上传到服务器(见列表1)。

  列表 1: Excel 文件上传表格

  

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

  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>

   

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"文本。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值