效果展示:

1.首先准备jar包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.8</version>
</dependency>

2.前台页面访问 导出excel的接口

通过window.location.href来访问接口,直接弹出下载框

// 导出数据
$('#outExcel').click(function(){var status = $('#status').val();window.location.href = baseUrl  + '/order/excel/orderrdExportExcel?status="+status;
});

3.后台通过获取response中的OutStream 流 ,将excel文件写到流里面,代码如下:

@GetMapping("/orderrdExportExcel")
public void grouppExportExcel(HttpServletRequest request,Orderrd orderrd,HttpServletResponse response) throws Exception{List<Orderrd> grouppList = orderrdService.selectAllForLayUI(orderrd);//导出文件的标题String title = "退款订单"+DateUtil.getSimpleDate01(new Date())+".xlsx";//设置表格标题行String[] headers = new String[] {"序号","流水编号","用户账号","用户姓名","收款账号","账户余额","退款金额","手续费","申请时间"};List<Object[]> dataList = new ArrayList<Object[]>();Object[] objs = null;for (int i = 0; i < grouppList.size(); i++) {objs = new Object[headers.length];objs[0] = 0;//设置序号,在工具类中会出现objs[1] = grouppList.get(i).getOrderrdCode();objs[2] = grouppList.get(i).getUsername();objs[3] = grouppList.get(i).getUserName();objs[4] = grouppList.get(i).getAccount();objs[5] = grouppList.get(i).getPremain();objs[6] = grouppList.get(i).getPricePre();objs[7] = grouppList.get(i).getPricePay();objs[8] = grouppList.get(i).getCreateTime();dataList.add(objs);//数据添加到excel表格}//使用流将数据导出OutputStream out = null;try {//防止中文乱码String headStr = "attachment; filename=\"" + new String( title.getBytes("gb2312"), "ISO8859-1" ) + "\"";response.setContentType("octets/stream");response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition", headStr);out = response.getOutputStream();ExportExcelSeedBack ex = new ExportExcelSeedBack(title, headers, dataList);//没有标题ex.export(out);out.flush();    out.close();    } catch (Exception e) {e.printStackTrace();}}

4.工具类如下:


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
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.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;public class ExportExcelSeedBack {//显示的导出表的标题private String title;//导出表的列名private String[] rowName ;private List<Object[]>  dataList = new ArrayList<Object[]>();HttpServletResponse  response;//构造方法,传入要导出的数据public ExportExcelSeedBack(String title,String[] rowName,List<Object[]> dataList){this.dataList = dataList;this.rowName = rowName;this.title = title;}/** 导出数据* */public void export(OutputStream out) throws Exception{try{HSSFWorkbook workbook = new HSSFWorkbook();                     // 创建工作簿对象HSSFSheet sheet = workbook.createSheet(title);                  // 创建工作表// 产生表格标题行//          HSSFRow rowm = sheet.createRow(0);//          HSSFCell cellTiltle = rowm.createCell(0);//sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面  - 可扩展】HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象HSSFCellStyle style = this.getStyle(workbook);                  //单元格样式对象//          sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));//合并单元格  //          cellTiltle.setCellStyle(columnTopStyle);//          cellTiltle.setCellValue(title);// 定义所需列数int columnNum = rowName.length;HSSFRow rowRowName = sheet.createRow(0);                // 在索引2的位置创建行(最顶端的行开始的第二行)// 将列头设置到sheet的单元格中for(int n=0;n<columnNum;n++){HSSFCell  cellRowName = rowRowName.createCell(n);               //创建列头对应个数的单元格cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);             //设置列头单元格的数据类型HSSFRichTextString text = new HSSFRichTextString(rowName[n]);cellRowName.setCellValue(text);                                 //设置列头单元格的值cellRowName.setCellStyle(columnTopStyle);                       //设置列头单元格样式}//将查询出的数据设置到sheet对应的单元格中for(int i=0;i<dataList.size();i++){Object[] obj = dataList.get(i);//遍历每个对象HSSFRow row = sheet.createRow(i+1);//创建所需的行数(从第二行开始写数据)for(int j=0; j<obj.length; j++){HSSFCell  cell = null;   //设置单元格的数据类型if(j == 0){cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(i+1); }else{cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);if(!"".equals(obj[j]) && obj[j] != null){cell.setCellValue(obj[j].toString());                       //设置单元格的值}}cell.setCellStyle(style);                                   //设置单元格样式}}//让列宽随着导出的列长自动适应for (int colNum = 0; colNum < columnNum; colNum++) {int columnWidth = sheet.getColumnWidth(colNum) / 256;for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {HSSFRow currentRow;//当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}//                 if (currentRow.getCell(colNum) != null) {//                     HSSFCell currentCell = currentRow.getCell(colNum);//                      if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {//                          int length =     currentCell.getStringCellValue().getBytes().length;//                          if (columnWidth < length) {//                              columnWidth = length;//                          }//                      }//                  }if (currentRow.getCell(colNum) != null) {HSSFCell currentCell = currentRow.getCell(colNum);if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {int length = 0;try {length = currentCell.getStringCellValue().getBytes().length;} catch (Exception e) {//e.printStackTrace();}if (columnWidth < length) {columnWidth = length;}}}}if(colNum == 0){sheet.setColumnWidth(colNum, (columnWidth-2) * 256);}else{sheet.setColumnWidth(colNum, (columnWidth+4) * 256);}}if(workbook !=null){try{workbook.write(out);}catch (IOException e) {e.printStackTrace();}}}catch(Exception e){e.printStackTrace();}finally{out.close();}}/* * 列头单元格样式*/    public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();//设置字体大小font.setFontHeightInPoints((short)11);//字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字 font.setFontName("Courier New");//设置样式; HSSFCellStyle style = workbook.createCellStyle();//设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜色;  style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;   style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜色;  style.setTopBorderColor(HSSFColor.BLACK.index);//在样式用应用设置的字体;  style.setFont(font);//设置自动换行; style.setWrapText(false);//设置水平对齐的样式为居中对齐;  style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}/*  * 列数据信息单元格样式*/  public HSSFCellStyle getStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();//设置字体大小//font.setFontHeightInPoints((short)10);//字体加粗//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字 font.setFontName("Courier New");//设置样式; HSSFCellStyle style = workbook.createCellStyle();//设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜色;  style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;   style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜色;  style.setTopBorderColor(HSSFColor.BLACK.index);//在样式用应用设置的字体;  style.setFont(font);//设置自动换行; style.setWrapText(false);//设置水平对齐的样式为居中对齐;  style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}}

JAVA导出excel 直接弹出下载框相关推荐

  1. springmvc导出excel并弹出下载框

    最近做grid列表相关数据导出到excel功能,根据自己选择的列导出成excel 并且下载到本地.废话不说 直接上关键代码: 需要引入相关的包: compile 'org.apache.poi:poi ...

  2. java 文件下载浏览器没有弹出下载框

    原因是我在前端用了ajax请求,后端用了二进制流来实现,而ajax不支持流形式,改成了表单提交解决.

  3. Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    原文转载:http://blog.csdn.net/evangel_z/article/details/7332535 目录(?)[+] 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数 ...

  4. python电脑下载有问题-Python 解决火狐浏览器不弹出下载框直接下载的问题

    用火狐浏览器下载文件,总是遇到这个弹窗问题,如下图: 原因: 使用火狐浏览器,点击下载,弹出下载弹框,使用AutoITLibrary库,能够判断是否弹出了下载弹框,但因为不能定位到下载弹框,导致没有下 ...

  5. php图片显示框,【转】php让图片弹出下载框的方法

    在做图片下载站时,常常需要给用户下载图片,但图片浏览器是直接可以打开的.怎么办呢,有没有什么方法可以让图片类型的文件弹出下载框下载呢, phperz.com 当然是有的,php的header函数就可以 ...

  6. IDM一直弹出下载框怎么办?

    安装了idm下载软件的用户可能遇到过这样的问题(本作也遇到过):当我们在线看视频时,idm突然一直弹出下载框,关都关不完,像中了病毒一样. idm病毒式弹窗BUG解决方法 其实这个问题很容易解决的,只 ...

  7. Python如何解决火狐浏览器不弹出下载框直接下载

    用火狐浏览器下载文件,总是遇到这个弹窗问题,如下图: 原因: 使用火狐浏览器,点击下载,弹出下载弹框,使用AutoITLibrary库,能够判断是否弹出了下载弹框,但因为不能定位到下载弹框,导致没有下 ...

  8. Postman:测试下载文件时默认打开文件改为弹出下载框

    问题 在Postman工具测试下载文件的功能时默认是将文件用文本方式打开,而我们需要的是弹出下载框的方式下载文件.此时需要做一下变动. 解决方案 点击send的按钮旁边的箭头,选择 send and ...

  9. 下载文件时,响应Response设置,浏览器弹出下载框

    在你潇洒的写下InputStream转到response的时候,需要先设置下Response,否则浏览器并不会弹出下载框 预处理 "Content-Type", "app ...

最新文章

  1. 程序员硬核劝告:现在还不是出门的时候
  2. Operation category READ is not supported in state standby
  3. elasticSearch6源码分析(10)SettingsModule
  4. mysql5.7.23版本环境配置
  5. MySQL启动异常Starting MySQL.The server quit without .
  6. 如何做一份能忽悠投资人的PPT
  7. vs strncpy运行出错_日志VS网络数据,谁能做好全链路监控?
  8. VS 2013安装教程
  9. UNIX网络编程电子书
  10. python大文件去重_python3 大文件去重的方法
  11. Silvaco TCAD安装包相关问题
  12. 12306车站信息爬取(1)——实现站点所有信息的查询
  13. 从tushare pro获取上证指数内成分股权重排序分出等级
  14. C语言书籍阅读-读书笔记--《C专家编程》
  15. linux和主机共享文件,设置Linux虚拟机与主机共享文件的方法
  16. java 抽屉效果_[Java教程]抽屉组件的滑动效果_星空网
  17. 【LaTeX应用】latex排版中插入参考文献
  18. azul zing_微软和Azul将OpenJDK提升到Azure云中
  19. Vue页面如何~及时更新页面数据
  20. 路径规划学习之地图生成(一)

热门文章

  1. VC字符串与时间戳相互转换
  2. iframe属性即使用
  3. Codeforces911题解
  4. linux刻录win10u盘_在Ubuntu Linux下制作Windows 启动安装 USB盘
  5. 想运行游戏,在Pycharm中安装Pygame库一直报错,我只是忽视了它
  6. linux环境下使用sort命令完成常见排序操作
  7. 字符串匹配KMP算法及其时间复杂度分析
  8. iOS操作本地视频 - 获取,压缩,取第一帧
  9. 如何恢复丢失的通讯录?
  10. 云队友丨抖音抢走了拼多多的支付“核按钮”