非异步方法

/**

* 使用Java导出Excel表格并由浏览器直接下载——基于POI框架

*

* @param response

* @return

* @throws IllegalAccessException

* @throws IOException

*/

@RequestMapping(value = "/export2", method = RequestMethod.GET)

public ResponseObj export2(HttpServletResponse response) throws IllegalAccessException, IOException {

//文件名

String fileName = "活动报名情况一览表";

//sheet名

String sheetName = "sheet";

List titleList = new ArrayList<>();

titleList.add("name");

titleList.add("address");

List dataList = new ArrayList<>();

dataList.add(new Student("张三", "连云港"));

dataList.add(new Student("李四", "连云港"));

// //如果我不想设置任何列为下拉选项,那我调用的时候将最后一个参数传入null即可。如果想设置某一列或某几列为下拉选项,那我调用的时候只需要这样(省略其他代码):

// String[] params = new String[]{"是","否"};

// //从第一行开始,到最后一行结束,设置第4列为下拉选项

// OutExcelQuery outExcelQuery = new OutExcelQuery(1,-1,3,3,params);

OutExcelQuery outExcelQuery = null;

HSSFWorkbook workbook = service.createExcel(sheetName, titleList, dataList, outExcelQuery);

//输出Excel文件

OutputStream output = response.getOutputStream();

response.reset();

//中文名称要进行编码处理

response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"),

"ISO-8859-1") + ".xls");

response.setContentType("application/x-xls");

workbook.write(output);

output.close();

return new ResponseObj<>(true, null);

}

/**

* 生成Excel表格

* @param sheetName sheet名称

* @param titleList 表头列表

* @param dataList 数据列表

* @param outExcelQuery 下拉选项设置

* @return HSSFWorkbook对象

* */

public static HSSFWorkbook createExcel(String sheetName, List titleList,

List dataList, OutExcelQuery outExcelQuery) throws IllegalAccessException {

//创建HSSFWorkbook对象(excel的文档对象)

HSSFWorkbook wb = new HSSFWorkbook();

//创建sheet对象(excel的表单)

HSSFSheet sheet=wb.createSheet(sheetName);

//在sheet里创建第一行,这里即是表头

HSSFRow rowTitle=sheet.createRow(0);

//写入表头的每一个列

for (int i = 0; i < titleList.size(); i++) {

//创建单元格

rowTitle.createCell(i).setCellValue(titleList.get(i));

}

int count = 0;

//写入每一行的记录

if (dataList!=null){

for (int i = 0; i < dataList.size(); i++) {

count++;

//创建新的一行,递增

HSSFRow rowData = sheet.createRow(i+1);

//通过反射,获取POJO对象

Class cl = dataList.get(i).getClass();

//获取类的所有字段

Field[] fields = cl.getDeclaredFields();

for (int j = 0; j < titleList.size(); j++) {

//设置字段可见,否则会报错,禁止访问

fields[j].setAccessible(true);

//创建单元格

rowData.createCell(j).setCellValue((String) fields[j].get(dataList.get(i)));

}

}

}

//如果开启了下拉选项

if (outExcelQuery!=null){

//如果表格中的记录数不是0

if (count!=0){

// 获取下拉列表数据

String[] strs = outExcelQuery.getParams();

//设置哪些行的哪些列为下拉选项

CellRangeAddressList rangeList =

new CellRangeAddressList(outExcelQuery.getRowStart(),

//结束行为-1时,说明设置所有行

outExcelQuery.getRowEnd()==-1?count:outExcelQuery.getRowEnd(),

outExcelQuery.getColStart(),outExcelQuery.getColEnd());

//绑定下拉数据

DVConstraint constraint = DVConstraint.createExplicitListConstraint(strs);

//绑定两者的关系

HSSFDataValidation dataValidation = new HSSFDataValidation(rangeList,constraint);

//添加到sheet中

sheet.addValidationData(dataValidation);

}

}

return wb;

}

java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...相关推荐

  1. 使用Java导出Excel表格并由浏览器直接下载——基于POI框架

    目录 背景描述 技术准备 导出Excel--尝鲜版 导出Excel--封装版(通过反射) 导出Excel--深度封装(设置下拉选项) 扩展--多个列分别是不同的下拉选项怎么封装 2019-10-28  ...

  2. java横向导出excel_利用Java进行Excel的数据导入导出

    1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...

  3. 基于POI框架操作Excel文件

    前言 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.POI的结构如下: HSSF - 提供读写Mi ...

  4. java的json导出excel_利用json生成excel表格

    起因: 之前利用反射生成excel导出,这个组件本来挺好用的,结果,坑爹的本地研发没有问题,生产环境却有问题.不知道什么原因直接导致服务重启,还重新加载类,直接导致jvm的永久区内存溢出. 异常: j ...

  5. java邮件中添加excel_使用java api 创建excel内容并发送邮件

    https://github.com/auguszero/javaToolRepsitory 利用java api 创建excel 内容并发送邮件 主要实现功能: 1.通过配置文件设置发送邮件发送方, ...

  6. JavaWeb开发:Excel文件上传、解析、过滤,并存入数据库(基于SSM框架)

    目录 一.效果展示 1.初始状态 2.导入的Excel文件 3.导入后状态 4.文件信息过滤更新 二.实现 1.文件传递 2.Controller层 3.Service层 4.ServiceImple ...

  7. java excel 导出 下载_使用Java导出Excel表格并由浏览器直接下载

    声明:本文是基于其他博主的文章,自己再稍微改了一点[公共类+业务类],感谢那个博主 参考地址:https://blog.csdn.net/wzy18210825916/article/details/ ...

  8. java datagrid导出excel_从datagridview中导出数据到excel

    第一种办法:直接在button的Click事件中写代码进行导出:private void button6_Click(object sender, EventArgs e) { SaveFileDia ...

  9. java excel 导入导出_java中excel文件的导入和导出

    如有需要可以加我Q群[308742428]大家一起讨论技术,提供技术支持. 后面会不定时为大家更新文章,敬请期待. 前端上传excel文件到后台,后台接收后保存数据到数据库. 这里需要说明的一点是前端 ...

最新文章

  1. centos7上开启单用户模式
  2. 好程序员分享大势所趋 HTML5成Web开发者最关心的技术
  3. 时钟周期及秒(s) 毫秒(ms) 微秒(μs) 纳秒(ns) 皮秒(ps)之间转换
  4. 刺猬文│从启动方式来看播客链的运行机制—设置验证者
  5. java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站
  6. java jfm入门_java图形编程
  7. javascript解析机制——预解析
  8. 汇编中寄存器加[]的意思
  9. 1.Spring——七大主要模块
  10. 两种方法,给你的Safari浏览器添加必应/有道/谷歌网页即时翻译插件
  11. Vue 扫描二维码、条形码
  12. 修改el-table表头高度 表格高度 行鼠标悬停颜色
  13. 2016年360校招笔试题
  14. html iframe自动高度,iframe高度自适应撑开
  15. 谷歌浏览器历史记录查看很慢解决方案
  16. python方差齐性检验_【Python】统计科学之方差齐性检验
  17. python ddt mysql_40- 数据驱动(ddt)
  18. DDN区块链:面向未来,全面发力!
  19. 流程控制语句break continu return 及方法(函数)
  20. 什么是ui设计培训?ui培训课程难学吗?

热门文章

  1. ReactRouter的实现
  2. html时间自动,编辑自动结束时间.html
  3. java 生产者消费者同步_经典线程同步问题(生产者消费者)--Java实现
  4. Cesium多屏展示
  5. 社区发现 实践_实践社区可以为您的组织做什么
  6. 远程控制 开源 鳄梨_开发人员关系与鳄梨的共同点
  7. devops实践指南_DevOps:掌握这些便捷指南
  8. sysadmin默认密码_Sysadmin指南,开源电子邮件客户端,macOS应用程序,SELinux,Firefox扩展等...
  9. python 重复执行任务_使用Python自动执行数字艺术家的重复任务
  10. 北京创客空间_世界上最大的创客空间,可增强开放安全性等