Struts2中POI在内存中生成文件并下载

POI是一个JAVA的实用jar包,可以生成excel文件,通常在web开发用于把数据库的数据生成excel文件,然后通过下载提供给用户。

专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业九龙坡免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

本文结合struts2和poi,说明如何在内存中生成一个excel文件并下载到客户端。

首先进行jsp文件,struts.xml文件和action文件的内容说明,对于struts.xml文件的下载配置和action文件中的对应的方法名的设定还不熟悉的朋友可以先看前面这篇文章struts2中下载文件的方法。

文件名:download.jsp

文件位置:网站根目录下的work目录下

文件内容:

 
 
 
 
  1. < %@ page contentType="text/html; charset=gbk" %>
  2. < %@ taglib uri="/struts-tags" prefix="s"%>
  3. < html>
  4. < a href="excel.action">下载文件< /a>
  5. < /html>

struts.xml文件

文件内容:

 
 
 
 
  1. < ?xml version="1.0" encoding="UTF-8" ?>
  2. < !DOCTYPE struts PUBLIC
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. < struts>
  6.     < package name="default" extends="struts-default">
  7.         < action name="excel" class="ExcelDownloadAction">
  8.             < result name="success" type="stream">
  9.                 < param name="contentType">application/vnd.ms-excel< /param>
  10.                 < param name="contentDisposition">attachment;filename="AllUsers.xls"< /param>
  11.                 < param name="inputName">excelFile< /param>
  12.             < /result>
  13.         < /action>
  14.     < /package>
  15.     
  16. < /struts>

然后是action文件

文件名:ExcelDownloadAction.java

文件内容:

 
 
 
 
  1. import java.io.ByteArrayInputStream;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import org.apache.poi.hssf.usermodel.HSSFCell;
  6. import org.apache.poi.hssf.usermodel.HSSFRow;
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. import com.opensymphony.xwork2.ActionSupport;
  10. @SuppressWarnings("serial")
  11. public class ExcelDownloadAction extends ActionSupport {
  12.     public InputStream getExcelFile() {
  13.         HSSFWorkbook workbook = new HSSFWorkbook();
  14.         HSSFSheet sheet = workbook.createSheet("sheet1");
  15.         {
  16.             // 创建表头
  17.             HSSFRow row = sheet.createRow(0);
  18.             HSSFCell cell = row.createCell((short) 0);
  19.             cell.setCellValue("id");
  20.             cell = row.createCell((short) 1);
  21.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  22.             cell.setCellValue("姓");
  23.             cell = row.createCell((short) 2);
  24.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  25.             cell.setCellValue("名");
  26.             cell = row.createCell((short) 3);
  27.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  28.             cell.setCellValue("年龄");
  29.             // 创建数据
  30.             // 第一行
  31.             row = sheet.createRow(1);
  32.             cell = row.createCell((short) 0);
  33.             cell.setCellValue("1");
  34.             cell = row.createCell((short) 1);
  35.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  36.             cell.setCellValue("张");
  37.             cell = row.createCell((short) 2);
  38.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  39.             cell.setCellValue("四");
  40.             cell = row.createCell((short) 3);
  41.             cell.setCellValue("23");
  42.             // 第二行
  43.             row = sheet.createRow(2);
  44.             cell = row.createCell((short) 0);
  45.             cell.setCellValue("2");
  46.             cell = row.createCell((short) 1);
  47.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  48.             cell.setCellValue("李");
  49.             cell = row.createCell((short) 2);
  50.             cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
  51.             cell.setCellValue("六");
  52.             cell = row.createCell((short) 3);
  53.             cell.setCellValue("30");
  54.         }
  55.         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  56.         try {
  57.             workbook.write(baos);
  58.         } catch (IOException e) {
  59.             // TODO Auto-generated catch block
  60.             e.printStackTrace();
  61.         }
  62.         byte[] ba = baos.toByteArray();
  63.         ByteArrayInputStream bais = new ByteArrayInputStream(ba);
  64.         return bais;
  65.     }
  66.     @Override
  67.     public String execute() throws Exception {
  68.         // TODO Auto-generated method stub
  69.         return super.execute();
  70.     }
  71. }

蓝色的代码使用poi生成一个excel格式的内容,红色的代码通过字节数组的输入输出流的转换提供给客户端最终的输入流。

好,代码完成后,运行一下,如图,

点击下载链接

可以下载也可以打开,我们选择打开,如图

最后声明,本文的poi生成和下载部分的代码实例,部分参考了网上教程实践而来。

本文出自 “点点滴滴” 博客。

当前名称:Struts2中POI在内存中生成文件并下载
转载注明:http://www.36103.cn/qtweb/news47/9997.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联