其中jxl.jar就是操作excel表的核心包,其他的包都是struts2的包
ExcelAction.java
package com.jxl.action; import java.io.InputStream; import java.io.UnsupportedEncodingException; import com.jxl.service.ExcelServiceImpl; import com.jxl.service.IExcelService; public class ExcelAction { private String fileName; private InputStream excelStream; public String getFileName() { try { fileName = new String(fileName.getBytes(),"ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return fileName + ".xls"; } public void setFileName(String fileName) { this.fileName = fileName; } public InputStream getExcelStream() { return excelStream; } public void setExcelStream(InputStream excelStream) { this.excelStream = excelStream; } public String exportExcel(){ IExcelService es = new ExcelServiceImpl(); excelStream = es.getExcelInputStream(); this.fileName = "学生成绩表"; return "excel"; } }
package com.jxl.service; import java.io.InputStream; public interface IExcelService { /** * 获得Excel表的输入流 * @return InputStream * 输入流 */ public InputStream getExcelInputStream(); }
package com.jxl.service; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import jxl.Workbook; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import com.jxl.service.IExcelService; public class ExcelServiceImpl implements IExcelService { @Override public InputStream getExcelInputStream() { //将OutputStream转化为InputStream ByteArrayOutputStream out = new ByteArrayOutputStream(); putDataOnOutputStream(out); return new ByteArrayInputStream(out.toByteArray()); } private void putDataOnOutputStream(OutputStream os) { jxl.write.Label label1; jxl.write.Label label2; WritableWorkbook workbook; try { workbook = Workbook.createWorkbook(os); WritableSheet sheet1 = workbook.createSheet("计算机01班", 0); label1 = new jxl.write.Label(0, 0, "计算机01班excel成绩表"); sheet1.addCell(label1); WritableSheet sheet2 = workbook.createSheet("计算机02班", 0); label2 = new jxl.write.Label(0, 0, "计算机02班excel成绩表"); sheet2.addCell(label2); workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 配置 Struts 2 应用中的常量 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <package name="platform-default" extends="struts-default"> <action name="excel" class="com.jxl.action.ExcelAction" method="exportExcel"> <!-- 下载文件类型定义,即定义为“stream” --> <result name="excel" type="stream"> <!-- application/vnd.ms-excel表示的是 EXCEL文件 --> <param name="contentType"> application/vnd.ms-excel </param> <!-- 下载文件输出流定义 --> <!-- 这里的inputName元素所对应的value值excelStream,在action中一定要有对应的getExcelStream()方法 --> <param name="inputName">excelStream</param> <!-- 下载文件处理方法 --> <param name="contentDisposition"> <!-- attachment表示附件方式,即下载时打开保存对话窗,filename表示下载时显示的保存时的文件名 --> <!-- 如果不写attachment;或者是写的是inline; 则表示内联,即会在浏览器中尝试打开下载的文件,而不是下载--> attachment;filename=${fileName} <!-- 在对象的aciton中要有fileName属性和getFileName()方法 --> </param> <!-- 下载缓冲区的大小 --> <param name="bufferSize">1024</param> </result> </action> </package> </struts>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- 设置struts 2过滤器 --> <filter> <filter-name>struts 2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts 2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 设置欢迎页面 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- session超时定义,单位为分钟 --> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>首页</title> </head> <body> <a href="excel.action">去下载一个excel文件</a> </body> </html>
完成以上所有的步骤后,把项目发布到服务器,用浏览器访问index.jsp,里面有功能入口
本实例只实现了最最简单的操作、下载excel表的功能,至于更详细的excel表的属性设置,可以参考 http://merrygrass.iteye.com/blog/558274 和 http://www.blogjava.net/Vincent-chenxj/articles/242512.html
原文地址:http://blog.csdn.net/wangcunhuazi/article/details/41442007