poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的

1.action类

package com.szallway.phr2.portal.action;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.szallway.phr2.portal.factory.ServiceFactory;
import com.szallway.phr2.portal.po.Account;
import com.szallway.phr2.portal.po.Counter;
import com.szallway.phr2.portal.po.Friend;
import com.szallway.phr2.portal.po.Healthbackground;
import com.szallway.phr2.portal.po.Permission;
import com.szallway.phr2.portal.po.Profile;
import com.szallway.phr2.portal.service.CounterService;
import com.szallway.phr2.portal.service.FriendService;
import com.szallway.phr2.portal.service.HealthbackgroundService;
import com.szallway.phr2.portal.service.PermissionService;
import com.szallway.phr2.portal.service.ProfileService;
import com.szallway.phr2.portal.util.ProfileIDGender;

public class FriendAction extends ActionSupport implements SessionAware,RequestAware, ModelDriven{
 private Map<String, Object> session;
 private Map<String, Object> request;
    private Friend friend;
    private String areacode;
    private int profid;
    private InputStream excelStream;  //定义一输入流
    private String fileName; //文件名

public String getFileName() {
  return fileName;
 }

public void setFileName(String fileName) {
  this.fileName = fileName;
 }

public InputStream getExcelStream() {
  return excelStream;
 }

public void setExcelStream(InputStream excelStream) {
  this.excelStream = excelStream;
 }

public int getProfid() {
  return profid;
 }

public void setProfid(int profid) {
  this.profid = profid;
 }

public String getAreacode() {
  return areacode;
 }

public void setAreacode(String areacode) {
  this.areacode = areacode;
 }

public Friend getFriend() {
  return friend;
 }
  
 public void setFriend(Friend friend) {
  this.friend = friend;
 }

@Override
 public void setSession(Map<String, Object> session) {
  // TODO Auto-generated method stub
         this.session = session;
 }

@Override
 public Object getModel() {
  // TODO Auto-generated method stub
  friend = new Friend();
  return friend;
 }
 FriendService fser = ServiceFactory.getFriendServieInstance();
 
 //查看所属档案的常用联系人
 public String selectfriendlist()throws Exception
 {
  Profile profile = (Profile)session.get("profile");
  List list = null;
  try{
   list = fser.byprofileid(profile.getProfileid());
  }catch(Exception e){
   e.printStackTrace();
  }
   // 没有紧急联系人,就添加

session.put("friendlist", list);
  request.put("tabletype", "friendlist");
  request.put("sjtabletype", "sjfriendlist");
  request.put("pagination", "");
  
  return SUCCESS;
 }
 
 //导出所属档案的常用联系人为excel
 public String exportFriend() throws Exception{
  HSSFWorkbook hssfworkbook = new HSSFWorkbook();
  HSSFSheet hssfsheet = hssfworkbook.createSheet();
  HSSFRow hssfrow = hssfsheet.createRow(0);
  //定义表头
  hssfrow.createCell((short)0).setCellValue("姓名");
  hssfrow.createCell((short)1).setCellValue("性别");
  hssfrow.createCell((short)2).setCellValue("所属关系");
  hssfrow.createCell((short)3).setCellValue("手机号码");
  hssfrow.createCell((short)4).setCellValue("电子邮件");
  Profile profile = (Profile)session.get("profile");
  int i = 1;
  Iterator it =  fser.byprofileid(profile.getProfileid()).iterator();   //根据档案id查看他所有的常用联系人,并迭代
  //添加表内容
  while (it.hasNext()) {
   Friend friend = (Friend) it.next();
   hssfrow = hssfsheet.createRow(i);
   hssfrow.createCell((short)0).setCellValue(friend.getFname());
   hssfrow.createCell((short)1).setCellValue(friend.getFgender());
   hssfrow.createCell((short)2).setCellValue(friend.getFrelationship());
   hssfrow.createCell((short)3).setCellValue(friend.getFmobilephone());
   hssfrow.createCell((short)4).setCellValue(friend.getFemail());
   i++;
  }
  FileOutputStream fileoutputstream = null;
  try {
  // fileoutputstream = new FileOutputStream("d:\Friend.xls");
//   hssfworkbook.write(fileoutputstream);
//   fileoutputstream.close();
         this.fileName = "friend";
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      hssfworkbook.write(baos); 
          baos.flush(); 
          byte[] aa = baos.toByteArray(); 
        //  String filename = "friend";
          excelStream = new ByteArrayInputStream(aa,0, aa.length); 
          baos.close();

} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   e.printStackTrace();
  }  
  return SUCCESS;
 } 
 @Override
 public void setRequest(Map<String, Object> request) {
  // TODO Auto-generated method stub
  this.request = request;
 }

}
2.struts内定义action

<!-- 导出常用联系人为excel -->
  <action name="exportFriend" class="com.szallway.phr2.portal.action.FriendAction" method="exportFriend">
  <!--    <result name="success" type="redirectAction">selectfriendlist</result>   -->
      <result name="success" type="stream">  
        <!-- 文件类型 --> 
        <param name="contentType"> application/vnd.ms-excel</param> 
        <!-- excelStream 与对应action中的输入流的名字要一致 --> 
        <param name= " inputName"> excelStream</param>  
        <!-- 文件名 与action中fileName一致 --> 
        <param name="contentDisposition">attachment;filename=" ${fileName}.xls"</param>  
        </result>
  </action>

3.jsp页面

在jsp页面只需加入<a href="exportFriend.action">导出excel</a>这样一连接或者表单按钮

<form action="exportFriend.action" method="post"><input type="submit" value="导出excel"/></from>

4.效果图

http://blog.sina.com.cn/s/blog_8394b21401012zbk.html

[转载]poi导出excel,可以自定义保存路径的更多相关文章

  1. POI导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  2. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  3. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  4. POI导出EXCEL经典实现(转)

    http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...

  5. poi导出excel数据量过大

    问题:使用poi导出excel,数据量过大导致内存溢出 解决思路:1.多sheet导出 2.生成多个excel打包下载 3.生成csv下载 本文使用的是第二个思路,代码如下: poiUtil工具类 p ...

  6. java解决poi导出excel文字水印,导出excel不可操作问题

    首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...

  7. poi导出excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  8. POI导出excel的简单demo

    目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...

  9. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

随机推荐

  1. 将windows系统装到USB存储设备

    需求: 1)一般公司比较规范,计算机系统有严格的限制策略,如果自己不懂得如何更改或者没有权限更改,将极其不便. 2)计划在家里完成在公司未完成的事,甚至异地出差觉得携带笔记本不太方便,寻找更便携的设备 ...

  2. 3Git使用入门

    1.Git作用:对源代码进行管理: 2.安装Git命令: apt-get install git apt-get install git-doc git-svn git-email git-gui g ...

  3. Android IOS WebRTC 音视频开发总结(六十)-- 您为什么招不到适合的音视频人才

    本文主要介绍音视频行业招聘现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 有过音视频人才招聘经验的应该都深有 ...

  4. Android IOS WebRTC 音视频开发总结(十九)-- kurento

    折腾了一个多星期终于将kurento的环境搭建好(开发阶段的产品,有些BUG要自己解决),所以单独写篇文件来介绍. 下面开始介绍kurento,文章来自博客园RTC.Blacker,转载请说明出处. ...

  5. ARC————自动引用计数

    一.内存管理/引用计数 1.引用计数式内存管理的方式(下面四种) 对象操作 OC方法 生成并持有对象 alloc/new/copy/mutableCopyd等方法 持有对象 retain方法 释放对象 ...

  6. php下intval()和(int)转换有哪些区别

    想知道使用intval()和(int)转换有什么区别? 或者说两者有什么不同,包括功能.定义方面的.或者和使用频率.效率等. 复制代码代码如下: <?php  echo "<br ...

  7. php使用swoole实现一个简单的多人在线聊天群发

    聊天逻辑的好多细节没有实现,只实现群发. php代码: $serv = new swoole_websocket_server("127.0.0.1",3999); //服务的基本 ...

  8. 了解Unix进程(1)

    今天瞎看 看到一本了解Unix进程 -- 理解UNIX进程 的书 不错,可以看看,使用的ruby语言,第一章讲的是一些基础的知识 1.输出进程号和父进程号: puts Process.pid # 得到 ...

  9. 第七节:使用实现了dispose模式的类型

    知道类型如何实现dispose模式之后,接下来看一下开发人员怎样使用提供了dispose模式的类型.这里不再讨论前面的SafeHandle类,而是讨论更常用的FileStream类. 可以利用File ...

  10. Python核心编程--学习笔记--8--条件与循环

    本章讲述if.while.for以及与他们搭配的else.elif.break.continue.pass等语句. 1 if语句 语法:三部分——关键字if.条件表达式.代码块.(记住冒号) if c ...