页面端:

<html>
  <head>
    <title>导入数据</title>
  </head>
  <body>
    <h1>导入excel数据</h1>
    <s:form action="import" method="post" enctype="multipart/form-data">
    导入Excel文件:<s:file name="excelFile" /> <br />
    <s:submit value="导入"></s:submit>
    </s:form>
  </body>
</html>

配置struts.xml

<action name="exportExcel" class="com.bestbpo.action.ExcelAction">

  <result name="success" type="stream">

    <param name="contentType">application/vnd.ms-excel</param>

    <param name="contentDisposition">attachment;filename=${fileName}</param>

    <param name="inputName">excelStream</param>

    <param name="bufferSize">1024</param>

  </result>

</action>

ExcelAction类:extends ActionSupport

InputStream excelStream;

String fileName;

操作poi

private void exportExcel(OutputStream os) {

  Workbook workbook = null;

  workbook = new HSSFWorkbook();

  Sheet sheet = workbook.createSheet("学生信息");

  Row row = sheet.createRow(0);

  row.createCell(0).setCellValue("学号");

  row.createCell(1).setCellValue("姓名");

  row.createCell(2).setCellValue("性别");

  row.createCell(3).setCellValue("生日");

  CellStyle cellStyle = workbook.createCellStyle();

  cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));

  List<Student> list = new StudentService().findAll();

  for (int i = 1; i <= list.size(); i++) {
    Student stu = list.get(i - 1);
    row = sheet.createRow(i);
    row.createCell(0).setCellValue(stu.getId());
    row.createCell(1).setCellValue(stu.getName());
    row.createCell(2).setCellValue(stu.getSex());
    Cell cell = row.createCell(3);
    cell.setCellValue(stu.getBirthday());
    cell.setCellStyle(cellStyle);
  }
  try {

    workbook.write(os);

  } catch (IOException e) {
    e.printStackTrace();
  }

}

如果用struts2提供的下载方法的话:

poi里的workbook.write(接受的是一个OutputStream);

将这个workbook写入到一个输出流

先new一个输出流ByteArrayOutputStreambaos=newByteArrayOutputStream();

workbook.write(baos);

baos.flush();

由于struts2框架 struts.xml 里面配制的是要传给struts一个输入流 然后有struts框架在转换成一个输出流给页面提供下载,所以要将workbook写进的输出流转成输入流:

byte[] aa=baos.toByteArray();//这句代码是将输出流转成一个byte数组

在new一个inputStream

excelStream=newByteArrayInputStream(aa,0,aa.length);

如果不依靠框架:(推荐)

public class ExportExcelAction implements ServletResponseAware {
private String format = "xls";
private HttpServletResponse response;
private String fileName;
//省略getter setter
public void setFormat(String format) {
//根据请求的文件的格式设置format的内容是 xls还是xlsx
}
public String execute() throws Exception {
//具体代码见后面
}
/**设置响应头*/
private void setResponseHeader() {
//具体代码见后面
}
/**导出数据*/
private void exportExcel(OutputStream os) {
//具体代码见后面
}
}

public void setFormat(String format) {
this.format = format;
if ("xls".equals(format)) {
this.fileName = "导出数据.xls";
}
if ("xlsx".equals(format)) {
this.fileName = "导出数据.xlsx";
}
}

private void setResponseHeader() {
response.setContentType("application/octet-stream;charset=iso-8859-1");
try {
response.setHeader("Content-Disposition", "attachment;filename="
+ java.net.URLEncoder.encode(this.fileName, "UTF-8"));
// 客户端不缓存
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private void exportExcel(OutputStream os) {
Workbook workbook = null;
if ("xls".equals(format)) {
workbook = new HSSFWorkbook();
}
if ("xlsx".equals(format)) {
workbook = new XSSFWorkbook();
}
Sheet sheet = workbook.createSheet("学生信息");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("学号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("生日");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
List<Student> list = new StudentService().findAll();
for (int i = 1; i <= list.size(); i++) {
Student stu = list.get(i - 1);
row = sheet.createRow(i);
row.createCell(0).setCellValue(stu.getId());
row.createCell(1).setCellValue(stu.getName());
row.createCell(2).setCellValue(stu.getSex());
Cell cell = row.createCell(3);
cell.setCellValue(stu.getBirthday());
cell.setCellStyle(cellStyle);
}
try {
workbook.write(os);
} catch (IOException e) {
e.printStackTrace();
}
}

public String execute() throws Exception {
setResponseHeader();
exportExcel(response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
return null;
}

转载于:https://www.cnblogs.com/yuzhengdong/p/3200336.html

Struts2 POI 导入导出Excel数据相关推荐

  1. POI导入导出Excel数据(IDEA版)简单运用

    一.POI Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能,简单来说就是能在Java程序中导入导出W ...

  2. java excel data 导入数据_java实现导入导出excel数据

    项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...

  3. java 动态导入excel_java实现导入导出excel数据

    项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...

  4. java 导入excel工具类_java Excel工具类,导入导出Excel数据

    java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据: 导出数据到Excel,Excel文件不存在会创建. 使用的是poi处理,兼容Excel. 对反射不够理解,目前先 ...

  5. toad导入数据_Oracle 使用TOAD实现导入导出Excel数据

    在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的.Quest Software为此提供了高效的Orac ...

  6. python导入excel数据-Python数据处理之导入导出excel数据

    欢迎点击上方"AntDream"关注我 .Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况.这里做一个Python处理Excel数据的总结, ...

  7. POI导入导出excel表

            在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印. Apache POI是Apache软件基金会 ...

  8. POI导入导出Excel(HSSF格式,User Model方式)

    1.POI说明 Apache POI是Apache软件基金会的开源代码库, POI提供对Microsoft Office格式档案读和写的功能. POI支持的格式: HSSF - 提供读写Microso ...

  9. C#使用NPOI实现导入导出Excel数据

    一.NPOI简介 1.1.NPOI是什么 NPOI是POI的.NET版本,POI是一套用Java写成的库,我们在开发中经常用到导入导出表格.文档的情况,NPOI能够帮助我们在没有安装微软Office的 ...

最新文章

  1. SAP S/4HANA现金管理之变
  2. 使用存储过程及触发器案例
  3. 图像处理中的通信原理——冈萨雷斯读书笔记(二)
  4. wxpython中文教程_wxPython中文教程 简单入门加实例
  5. 一款超级炫酷的编辑代码的插件 Power Mode
  6. Java 添加、验证PDF 数字签名
  7. 杭电oj部分新手入门题目全解(1089-1096)
  8. Unity解析XML文件
  9. chrome 您的浏览器禁用了Javascript
  10. Android 线程 Damo
  11. 【DRF+Django】微信小程序入门到实战_day04(上)
  12. 新零售mysql设计 订单表 订单详情表
  13. 快速下载官方网站软件
  14. 各种校验之MD5校验
  15. 数字孪生城市研究案例
  16. 企业管理的基本知识有哪些?如何梳理企业流程管理?
  17. Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码
  18. MYSQL 查询指定范围内的经纬度
  19. arm SIMD指令
  20. 轨道交通基本元器件之——应答器

热门文章

  1. The type Resource is not accessible due to restriction on required library
  2. js中给多个class属性的标签赋值
  3. user_tab_columns是什么
  4. 计算机修复画笔结果分析,Photoshop
  5. nemesis什么车_狂野飙车9TrionNemesis介绍 S级车Trion复仇女神属性详解
  6. java实现键盘移动图片,快速移动视图与键盘
  7. 道指mt4代码_道恩转债上市首日遭大股东清仓式减持!
  8. 安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息
  9. 文件上传控件 css,CSS3 自定义文件上传输入控件界面
  10. python问题解决方案_Python安装、遇到的问题及解决方案,python,和,方法