Java web项目利用POI导出excel

【Apache POIJava Web根据模板导出word文件 最近工作中遇到一个需求:根据word模板文档导出word文件。 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下:   Apache-POI在线Javadoc:http://tool.oschina.net/apidocs/apidoc?api=apache-POI 官方网站:http://poi.apache.org/ POI详细介绍: Ap... 阅读详情

今天做项目需要导出excel文件,采用POI生成excel结构。方式如下:(解决了中文名称下载问题

方式一:
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class ProcessExcelAction extends ActionSupport {

     public void export() {
          // 第一步,创建一个webbook,对应一个Excel文件
          HSSFWorkbook wb = new HSSFWorkbook();
          // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
          HSSFSheet sheet = wb.createSheet("学生表一");
          // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
          HSSFRow row = sheet.createRow((int) 0);
          // 第四步,创建单元格,并设置值表头 设置表头居中
          HSSFCellStyle style = wb.createCellStyle();
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
          String fileName = "学生.xls";
          HttpServletResponse response = ServletActionContext.getResponse();
          this.setResponseHeader(response, fileName);
          HSSFCell cell = row.createCell(0);
          cell.setCellValue("学号");
          cell.setCellStyle(style);
          cell = row.createCell(1);
          cell.setCellValue("姓名");
          cell.setCellStyle(style);
          cell = row.createCell(2);
          cell.setCellValue("年龄");
          cell.setCellStyle(style);
          cell = row.createCell(3);
          cell.setCellValue("生日");
          cell.setCellStyle(style);

          // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
          List<Student> list = gainStudent();

          for (int i = 0; i < list.size(); i++) {
               row = sheet.createRow((int) i + 1);
               Student stu = (Student) list.get(i);
               // 第四步,创建单元格,并设置值
               row.createCell(0).setCellValue((double) stu.getId());
               row.createCell(1).setCellValue(stu.getName());
               row.createCell(2).setCellValue((double) stu.getAge());
               cell = row.createCell(3);
               cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu
                         .getBirth()));
          }
          // 第六步,将文件存到指定位置
          try {
               OutputStream os = response.getOutputStream();
               wb.write(os);
               os.flush();
               os.close();
          } catch (Exception e) {
               e.printStackTrace();
          }
     }

     public void setResponseHeader(HttpServletResponse response, String fileName) {
          try {
               try {
                    fileName = new String(fileName.getBytes(),"ISO8859-1");
               } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               }
               response
                         .setContentType("application/octet-stream;charset=ISO8859-1");
               response.setHeader("Content-Disposition", "attachment;filename="
                         + fileName);
               response.addHeader("Pargam", "no-cache");
               response.addHeader("Cache-Control", "no-cache");
          } catch (Exception ex) {
               ex.printStackTrace();
          }
     }

     private List<Student> gainStudent() {
          List<Student> list = new ArrayList<Student>();
          SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
          try {
               Student user1 = new Student(1, "张三", 16, df.parse("1997-03-12"));
               Student user2 = new Student(2, "李四", 17, df.parse("1996-08-12"));
               Student user3 = new Student(3, "王五", 26, df.parse("1985-11-12"));
               list.add(user1);
               list.add(user2);
               list.add(user3);
          } catch (ParseException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }

          return list;
     }

}


方式二:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
public class ProcessExcelAction1 extends ActionSupport {
       private String fileName = "学生.xls";
       private InputStream downloadStream ;
       public String export() {
             // 第一步,创建一个 webbook,对应一个Excel文件
            HSSFWorkbook wb = new HSSFWorkbook();
             // 第二步,在 webbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = wb.createSheet( "学生表一" );
             // 第三步,在sheet中添加表头第0行,注意老版本 poi对Excel的行数列数有限制short
            HSSFRow row = sheet.createRow(( int ) 0);
             // 第四步,创建单元格,并设置值表头 设置表头居中
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle. ALIGN_CENTER ); // 创建一个居中格式
            HSSFCell cell = row.createCell(0);
            cell.setCellValue( "学号" );
            cell.setCellStyle(style);
            cell = row.createCell(1);
            cell.setCellValue( "姓名" );
            cell.setCellStyle(style);
            cell = row.createCell(2);
            cell.setCellValue( "年龄" );
            cell.setCellStyle(style);
            cell = row.createCell(3);
            cell.setCellValue( "生日" );
            cell.setCellStyle(style);
             // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
            List<Student> list = gainStudent();
             for (int i = 0; i < list.size(); i++) {
                  row = sheet.createRow(( int ) i + 1);
                  Student stu = (Student) list.get(i);
                   // 第四步,创建单元格,并设置值
                  row.createCell(0).setCellValue(( double ) stu.getId());
                  row.createCell(1).setCellValue(stu.getName());
                  row.createCell(2).setCellValue(( double ) stu.getAge());
                  cell = row.createCell(3);
                  cell.setCellValue( new SimpleDateFormat("yyyy-mm-dd" ).format(stu
                              .getBirth()));
            }
             // 第六步,将文件存到指定位置
             try {
                  ByteOutputStream bos = new ByteOutputStream();
                  wb.write(bos);
                  bos.flush();
                   byte [] byteArray = bos.getBytes();
                   downloadStream = new ByteInputStream(byteArray, 0, byteArray.length );
                  bos.close();
            } catch (Exception e) {
                  e.printStackTrace();
            }
             return SUCCESS ;
      }
       private List<Student> gainStudent() {
            List<Student> list = new ArrayList<Student>();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd" );
             try {
                  Student user1 = new Student(1, "张三" , 16, df.parse("1997-03-12" ));
                  Student user2 = new Student(2, "李四" , 17, df.parse("1996-08-12" ));
                  Student user3 = new Student(3, "王五" , 26, df.parse("1985-11-12" ));
                  list.add(user1);
                  list.add(user2);
                  list.add(user3);
            } catch (ParseException e) {
                   // TODO Auto-generated catch block
                  e.printStackTrace();
            }
             return list;
      }
       public void setFileName(String fileName) {
             this .fileName = fileName;
      }
       public String getFileName() {
             try {
                   fileName = new String(fileName .getBytes(),"ISO8859-1" );
            } catch (UnsupportedEncodingException e) {
                   // TODO Auto-generated catch block
                  e.printStackTrace();
            }
             return fileName ;
      }
       public void setDownloadStream(InputStream downloadStream) {
             this .downloadStream = downloadStream;
      }
       public InputStream getDownloadStream() {
             return downloadStream ;
      }
}


struts2配置文件配置内容:
< result name ="success" type= "stream">
                         < param name ="contentType" > application/vnd.ms-excel</ param >
                         < param name ="contentDisposition" > attachment;filename=${fileName}</ param >
                         < param name ="bufferSize" > 1024</ param >
                         < param name ="inputName" > downloadStream</ param >
 </ result>



注意:以上红色字体为必须转换。若不转换会造成如下问题:
方式一:
     1.firefox可以正常下载,但是不能显示中文名称
     2.ie正常
方式二:
    1.firefox可以正常下载,但是不能显示中文名称
    2.ie下载报错
添加红色文本区域,两种方法均正常

【Isaac Sim】无头服务器远程桌面连接实战:Turbovnc配置与常见问题解决 本文详细介绍了在无头GPU服务器上通过Turbovnc远程桌面连接并运行NVIDIA Isaac Sim的实战教程。针对无图形界面服务器运行仿真软件的核心痛点,文章提供了从Turbovnc安装配置、SSH隧道建立,到以普通用户身份启动服务、解决GLXBadFBConfig等常见图形错误的完整方案,帮助开发者在云端高效部署机器人仿真环境。 阅读详情

相关推荐

ADNI数据集下载(详细)

刚刚接触到这个数据集的时候比较头疼,用了好长的时间才把下载过程和预处理过程弄明白。需要发送电子邮件给官方平台,收到回信后才能够下载到数据集。 1、ADNI账号注册 第一步:搜索百度打开ADNI 第二步,点击ADTA&amp;amp;SAMPLES 第三步:一直将鼠标往下拉 点击ADNI,进入里面填写信息。需要填写的信息还是挺多的,耐心填写,再等到邮件回复就可以了 2、ADNI数据集下载 登录申请的邮...

蜗牛遥遥 3万+

Java Poi导出Excel表格详解

导出多个sheet页,合并单元格、设置单元格样式、设置字体样式

wry2000的博客 4427

Underwater_Comm_ofdm水下信道_ofdm_OFDM多径_ofdmunderwater_UnderwaterOF

传输ofdm数据,采用了简单的多径信道,实现水下通信,整体程序还可以,可以参考参考

java使用POI生成Excel导出

在后端中通过POI生成Excel文件流,将输出流(outputStream)转为输入流(inputStream)后又需要将输入流(inputStream)转为File对象。问题:如果需要将输入流(inputStream)转为File对象,则必须要根据本地路径去生成一个File对象才行,也就是说不管怎样本地都必须要生成出来一个文件。看到这里你可能会好奇,这不是也在本地生成了个文件吗?在经过一系列的资料查询后,发现如下方式可以大致满足需求。即为我们需要的File对象。

爱学习的大雄的博客 5533

Java使用POI导出Excel

不管是Web开发还是桌面开发,对办公软件的操作是常有的需求,如对微软Excel电子表格的操作,经常需要对一些数据导出Excel文件,或将一个Excel文件的数据读取到数据库。在java操作Excel可以使用POI组件或JXL组件。 POI全称PoorObfuscation Implementation ,是Apache组件的一个开源项目,可以对微软的Office一系列办公软件进行读写操作。 ......

田野上的风筝 5万+

Javaweb利用POI导出Excel表格

场景:要求利用Excel把报表的数据导出到本地计算机。 Javaweb生成Excel表格有很多种技术,我选择了POI技术进行Excel表格的导入导出。选择POI是因为它兼容了office2007以上的版本和简便的操作性。在此通过简单的例子说明如何利用POI生成一个表格,在表格里面简单填写一些内容,并通过客户端下载生成的Excel表格。首先要搭建好一个javaweb的编程环境,下载POI的jar包。详

无情 874

Java web项目利用POI导出EXCEL表格

SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell:单元格 HSSFCellStyle :单元格样式 HSSFFont:字体 Excel中的工作簿、工作表、行、单元格中的关系: 一个Excel文件对应于一个workbook(HSSFWorkb...

bigboss_666的博客 1273

Spring+struts2+hibernate框架的Java Web项目利用POI导出Excel简单例子

在开始编写之前,小猿要先导入POI的jar包哟~~ POI介绍 Apache POI是Apache软件基金会的开放源码函式库,是用Java编写的免费开源的跨平台的 Java API,POI提供API给Java程序对Microsoft Office格式档案进行各种操作。 POI主要用到的类有HSSFWorkbook、HSSFSheet、HSSHRow、HSSFCell,

LIU_KuLaLaLa的博客 5891

web项目导出excel并下载

web项目导出excel并下载 一、先导入POI的jar包 一般这个版本的jar都有下载,其他的高版本的可能会有冲突。我试过过几个。 二、创建工具类 import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermode

qq_44251576的博客 400

Java 导出Excel报表

首先在maven项目中添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache

hackzfy的博客 369

JAVA web项目返回excel文件的方法

服务端代码:记得引poi3.8的包@RequestMapping("exportFile") public void exportFile(HttpServletRequest request, HttpServletResponse response){ try{ String fileName = "findMedicine.xlsx";

一言不合吃吃吃的博客 4064

使用jxls根据excel模板导出excel

最近项目中有一个功能是根据客户的excel模板导出excel,经过同事JAY的提醒,可以用jxls包来实现。 1.包的准备,由于这次的项目只是普通的javaweb项目,所以去网上下载了2个jar包,如图: 如果是maven项目那就pom文件中加入 <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifact

Roger 748

12、POI之数据导入导出

POI简介(Apache POI),Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

执手天涯@的博客 2374

javaweb使用POI导出导出excel表格

由于工作的需要,需要用java将数据库中的数据导出Excel表格,这就用到了Apache的POI组件,该组件让我们能够自定义创建Excel工作薄,然后导出文件即可。 1.首先准备好POI的包,使用maven导入或者直接加载jar都可以。 我是下载了poi-3.11-20141221.jar,poi-ooxml-3.11-20141221.jar,poi-ooxml-schemas-3.11-

浮生Spider 798

java web项目poi导出excel操作

web项目中经常用到excel导出功能,poi导出为其中一种。现将整个流程操作整理如下, 1、首先是excel导出的工具类ExportExcelUtil,代码如下import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.po

424

java web excel poi_Java Web使用POI导出Excel的方法详解

本文实例讲述了Java Web使用POI导出Excel的方法。分享给大家供大家参考,具体如下:采用Spring mvc架构:Controller层代码如下@Controllerpublic class StudentExportController{@Autowiredprivate StudentExportService studentExportService;@RequestMapping...

weixin_36378683的博客 289

Java web 导出Excel使用POI

Java 导出Excel使用POI

CapMiachael的博客 659

Java导出Excel表的两种方式

背景 新公司会员分销报表管理系统有导出excel表的场景,通过查找,项目中并没有excel表相关工具类,故手写了一个工具类给大家分享一下,以备不时之需。 注意 1.该工具类包含导出和导入解析功能,其中导入解析功能需读者根据自身业务情况做进一步封装。 2.工具类中有笔者自己的CommonException异常类,需读者根据自身业务做相应调整和替换。 import com.zzx.commons.exceptions.CommonException; import org.apache.poi.hssf

Husky 1万+

Java web项目使用Apache POI 实现对Excel的动态导入及导出

原生poi代码对java web上传excel动态表格获取数据

m0_66607230的博客 1575

javapoi

POI操作Excel文件 1. POI结构与常用类 3 (1) POI介绍 3 (2) POI结构说明 3 (3) POI常用类说明 3 2. Excel的基本操作 3 (1) 创建Workbook和Sheet 3 (2) 创建单元格 3 (3) 创建文档摘要信息 4 (4) 创建批注 4 (5) 创建页眉和页脚 4 3. Excel的单元格操作 5 (1) 设置格式 5

肖朋的专栏 1万+
上一篇: Struts2返回JSON格式包括从父类继承的属性
下一篇: Web利用POI导入XML
小马pony
博客等级 码龄14年 11粉丝 62原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值