java统计报表,导出excle,自定义存储目录

做一个将查询出来的数据写入excel,并且点击导出按钮是,可以选择导出路径
**直接上完整代码

1.utils工具类,里面可以自己设置样式,详细看注释

import java.io.File;
import java.io.FileOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class ExcelUtil {/*sheet Name表名, titleName标题名, file Name文件名,columnNumber列号, columnWidth列宽, columnName列名**/public static ResponseEntity<byte[]> ExportNoResponse(String sheetName, String titleName,String fileName, int columnNumber, int[] columnWidth,String[] columnName, String[][] dataList, HttpServletRequest request,HttpServletResponse response) throws Exception {if (columnNumber == columnWidth.length && columnWidth.length == columnName.length) {// 第一步,创建一个webbook,对应一个Excel文件HSSFWorkbook wb = new HSSFWorkbook();// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);// sheet.setDefaultColumnWidth(15); //统一设置列宽for (int i = 0; i < columnNumber; i++) {for (int j = 0; j <= i; j++) {if (i == j) {sheet.setColumnWidth(i, columnWidth[j] * 256); // 单独设置每列的宽}}}// 创建第0行 也就是标题HSSFRow row1 = sheet.createRow((int) 0);row1.setHeightInPoints(20);// 设备标题的高度// 第三步创建标题的单元格样式style2以及字体样式headerFont1HSSFCellStyle style2 = wb.createCellStyle();style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗headerFont1.setFontName("黑体"); // 设置字体类型headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小style2.setFont(headerFont1); // 为标题样式设置字体样式HSSFCell cell1 = row1.createCell(0);// 创建标题第一列sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,columnNumber - 1)); // 合并第0到第17列cell1.setCellValue(titleName); // 设置值标题cell1.setCellStyle(style2); // 设置标题样式// 创建第1行 也就是表头HSSFRow row = sheet.createRow((int) 1);row.setHeightInPoints(37);// 设置表头高度// 第四步,创建表头单元格样式 以及表头的字体样式HSSFCellStyle style = wb.createCellStyle();style.setWrapText(true);// 设置自动换行style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式style.setBottomBorderColor(HSSFColor.BLACK.index);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗headerFont.setFontName("黑体"); // 设置字体类型headerFont.setFontHeightInPoints((short) 10); // 设置字体大小style.setFont(headerFont); // 为标题样式设置字体样式// 第四.一步,创建表头的列for (int i = 0; i < columnNumber; i++) {HSSFCell cell = row.createCell(i);cell.setCellValue(columnName[i]);cell.setCellStyle(style);}String code = createID2();// 第五步,创建单元格,并设置值for (int i = 0; i < dataList.length; i++) {row = sheet.createRow((int) i + 2);// 为数据内容设置特点新单元格样式1 自动换行 上下居中HSSFCellStyle zidonghuanhang = wb.createCellStyle();zidonghuanhang.setWrapText(true);// 设置自动换行zidonghuanhang.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式// 设置边框zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);// 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();zidonghuanhang2.setWrapText(true);// 设置自动换行zidonghuanhang2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中// 设置边框zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);HSSFCell datacell = null;for (int j = 0; j < columnNumber; j++) {datacell = row.createCell(j);datacell.setCellValue(dataList[i][j]);datacell.setCellStyle(zidonghuanhang2);}}// 第六步,将文件存到指定位置try {String path =  request.getServletContext().getRealPath("/upload/" + "测试报表" +code+ ".xls");File file = new File(path);if(!file.exists()){//先得到文件的上级目录,并创建上级目录,在创建文件file.getParentFile().mkdir();try {//创建文件file.createNewFile();} catch (IOException e) {e.printStackTrace();}}FileOutputStream fout = new FileOutputStream(file);//  new FileOutputStream("\\upload\\" + "测试报表" +code+ ".xls");wb.write(fout);fout.close();String fileName1 = "测试报表" +code+ ".xls";//fileName1 = fileName1.substring(1, fileName1.length());String dfileName = new String(fileName1.getBytes("gb2312"), "iso8859-1");HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);headers.setContentDispositionFormData("attachment", dfileName);String str = "导出" + "测试报表" + "成功!";System.out.println(str);//HttpStatus.OK兼容iereturn new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
//                  fout.close();} catch (Exception e) {e.printStackTrace();String str1 = "导出" + "测试报表" + "失败!";System.out.println(str1);}} else {System.out.println("失败,Game over");}return null;}public static String createID2(){//将Date类型转成String类型Date now=new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");String dateStr=dateFormat.format(now);byte[] lock = new byte[0];// 位数,默认是8位final long w = 100000000;long r = 0;synchronized (lock) {r = (long) ((Math.random() + 1) * w);}return dateStr+String.valueOf(r).substring(1);}
}

3.请求方法

@RequestMapping(value = "/toFile")public ResponseEntity<byte[]> uploadFile(HttpServletRequest request,HttpServletResponse response) throws Exception {List<IsOrRe> list = isOrReService.slectByParam();String sheetName = "测试统计表单";String titleName =  "清城测试订单报表";String fileName = "测试报表XXX";//columnWidth columnName 长度等于columnNumberint columnNumber = 8;int[] columnWidth = {6, 12,10, 15, 15, 12, 10,, 15};String[] columnName = {"序号", "XX公司", "产品名称", "方案XX", "订单号", "XX号", "XX1", "XX2"};//将List转换为二维数组String[][]String[][] ss = new String[list.size()][columnNumber];for (int i = 0; i < list.size(); i++) {ss[i] = new String[]{String.valueOf(i+1),list.get(i).getInCony(),list.get(i).getPrName(), list.get(i).getPlName(),list.get(i).getOrNo(), list.get(i).getPoNo(),list.get(i).getAppName(),list.get(i).getAppMobile() };}ResponseEntity<byte[]> res = ExportNoResponse(sheetName, titleName, fileName,columnNumber, columnWidth, columnName, ss, request, response);return res;}

浏览器点击导出按钮导出效果:这就可以选择导出路径了

xls内容样式

java统计报表,导出excel,自定义存储目录相关推荐

  1. Java操作poi导出Excel自定义字体颜色

    Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...

  2. java使用模板导出Excel表格

    java使用模板导出Excel表格 文章目录 java使用模板导出Excel表格 模板示例 一.引入依赖 二.使用步骤 1.添加工具类 2.导出Excel 模板示例 一.引入依赖 <depend ...

  3. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  4. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  5. Java从零开始实现导出excel(一)

    Java从零开始实现导出excel(一) java导出excel两种方式 使用easyExcel通过模板导出excel 1.快速创建工程 下面我就直接贴代码 注意事项: 新人博主,随笔记录.主要还是通 ...

  6. java中poi导出Excel表格(前台流文件接收)

    java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...

  7. Java 使用EasyExcel导出excel文件

    Java 使用EasyExcel导出excel文件 一.引入pom依赖 二.导出实体 三. 生成excelController 四.效果 一.引入pom依赖 <dependency>< ...

  8. Java从零开始实现导出excel(三)

    Java从零开始实现导出excel(三) 新人博主,随笔记录.主要还是通过自己日常工作积累,系统整理一些技术.希望能够节省更多人的时间,走出自己的路. 简述 新的一年,先祝各位小伙伴新的一年,事业有成 ...

  9. java 使用poi导出excel,可控制固定前2列固定标头排版,带统计数据格式的

    使用poi导出排版漂亮的excel文件 html代码: <button class="btn btn-link" ng-model="exportExcel&quo ...

最新文章

  1. 计算机基础知识精品课程,计算机应用基础精品课
  2. python windows窗口置顶_想用Python编程却不知如何下手?一篇搞定编程准备工作
  3. (王道408考研数据结构)第七章查找-第四节:哈希表(基本概念及其操作)
  4. ORACLE 正值表达式
  5. iOS开发之跳转指定的tabbar控制器(二级页面跳转到指定的tabbar页面)
  6. Entity Framework 4.1 CodeFirst实例
  7. PIC24 通过USB在线升级 -- USB HID bootloader
  8. Cesium:实现漫游飞行
  9. 基于Arduino、ESP8266的物联网项目开发方案整理、毕业设计(第二波)
  10. git上传详细步骤和提交代码的各种报错解决方式.
  11. 典藏推荐:《乱世佳人》(《飘》)
  12. 二次采样设置的四种彩色模式RGB565,ARGB8888,ARGB4444,ALPHA_8
  13. vpu测试_联发科P30支持的VPU是什么?不知道就别说你懂科技了
  14. 使用Trinamic TMC2300步进驱动器做一个迪斯科灯项目
  15. 小熊派折叠开发板(一)- 开发板介绍
  16. 有GIS有意思︱讲述地图的故事
  17. Linux mysql服务(重启,启动,停止)
  18. 有效的数独-位运算(详细解释)-只需遍历一遍数组
  19. 知网复制太麻烦了?试试这个方法
  20. ubuntu LuCI

热门文章

  1. 不要轻易放过一个30几岁的程序员
  2. 短视频社交小程序开发
  3. go 实现抓包 ,盗取浏览器接口信息|反反爬虫
  4. webos开发 html,尝试在WebOS中创建HTML5表,但失败
  5. MFC 消息分类 (II)
  6. 8弦金属摇滚电吉他音源 Orange Tree Samples Evolution Dracus Kontakt
  7. zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发
  8. 北京市政交通一卡通余额提醒
  9. 总结2015,展望2016
  10. 单片机开发从来不用数据结构?