摘自:http://www.xasxt.com/index.php/article/jiaocheng/shipin_1801.html
不用大费周章的,在这里我举出两个简单的例子。 第一个例子会展示如何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"文本。
不用大费周章的,在这里我举出两个简单的例子。 第一个例子会展示如何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"文本。