方法一 (2021年01月更新)

生成excel模板

    @RequestMapping("/downloadExcel")public void downloadExcel(HttpServletResponse response, HttpServletRequest request) {String [] excelHeader = {"姓名","手机号(必填)","渠道名","产品名","手机操作系统(IOS/安卓)","是否是XX数据"};List<Object> list = new ArrayList<>();Object[] obj1 = {"张三","173*****311‬","a1","A","IOS","是"};Object[] obj2 = {"李四","138*****742","a2","B","安卓","否"};list.add(obj1);list.add(obj2);FileExport.exportExcel(excelHeader, list, "XXX模板", response, request);}

FileExport工具类:

package com.abc.common.utils.file;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.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;/*** 文件导出工具* @author abc* @date 2019/01/08*/
public class FileExport {private static final Logger logger = LoggerFactory.getLogger(FileExport.class);/** CSV文件列分隔符 */private static final String CSV_COLUMN_SEPARATOR = ",";private static final String CSV_COLUM_TABLE = "\t";/** CSV文件列分隔符 */private static final String CSV_RN = "\r\n";/*** 导出Excel文件* * @param excelHeader*            导出文件中表格头* @param list*            导出的内容* @param response*            HttpServletResponse对象,用来获得输出流向客户端写导出的文件* @param sheetName*            Excel的sheet名称,加上时间戳作为导出文件的名称*/public static void exportExcel(String [] excelHeader, List<Object> list, String sheetName, HttpServletResponse response, HttpServletRequest request) {HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet(sheetName);HSSFRow row = sheet.createRow((int) 0);/******设置单元格是否显示网格线******/sheet.setDisplayGridlines(false);/******设置头单元格样式******/HSSFCellStyle style = wb.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);Font fontHeader = wb.createFont();fontHeader.setBold(true);fontHeader.setFontHeight((short) 240);style.setFont(fontHeader);style.setBorderBottom(BorderStyle.THIN);style.setBorderLeft(BorderStyle.THIN);style.setBorderRight(BorderStyle.THIN);style.setBorderTop(BorderStyle.THIN);/******设置头内容******/for (int i = 0; i < excelHeader.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellValue("  " +excelHeader[i] + "  ");cell.setCellStyle(style);           }   /******设置内容单元格样式******/HSSFCellStyle styleCell = wb.createCellStyle();Font fontCell = wb.createFont();fontCell.setColor(HSSFColor.BLACK.index);styleCell.setAlignment(HorizontalAlignment.CENTER);styleCell.setFont(fontCell);styleCell.setBorderBottom(BorderStyle.THIN);styleCell.setBorderLeft(BorderStyle.THIN);styleCell.setBorderRight(BorderStyle.THIN);styleCell.setBorderTop(BorderStyle.THIN);/******设置单元格内容******/for (int i = 0; i < list.size(); i++) {row = sheet.createRow(i + 1);/******设置行高******/row.setHeightInPoints(20);Object[] obj = (Object[]) list.get(i);          for (int j = 0; j < excelHeader.length; j++) {styleCell.setWrapText(false);HSSFCell cell = row.createCell(j);if (obj[j] != null){cell.setCellValue(obj[j].toString());}else{cell.setCellValue(""); }          //if(obj[j].toString().length()>20)//    styleCell.setWrapText(true);cell.setCellStyle(styleCell);sheet.autoSizeColumn(j);}   } OutputStream ouputStream = null;try {String encoding = "UTF-8";/** 获取浏览器相关的信息 */String userAgent = request.getHeader("user-agent");/** 判断是否为msie浏览器 */if (userAgent.toLowerCase().indexOf("msie") != -1){encoding = "gbk";}response.setCharacterEncoding(encoding);response.setContentType("application/vnd.ms-excel"); String fileName = sheetName;SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHMMSS");fileName += (dateFormat.format(new Date())).toString()+".xls";response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, encoding));ouputStream = response.getOutputStream();   wb.write(ouputStream);     ouputStream.flush();  } catch (Exception e) {e.printStackTrace();} finally {try {if(ouputStream!=null) {ouputStream.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 导出CSV文件* @param dataList 集合数据* @param colNames 表头部数据* @param mapKey 查找的对应数据*/public static boolean doExport(List<Map<String, Object>> dataList, String colNames, String mapKey, OutputStream os) {try {StringBuffer buf = new StringBuffer();String[] colNamesArr = null;String[] mapKeyArr = null;colNamesArr = colNames.split(",");mapKeyArr = mapKey.split(",");/******完成数据csv文件的封装******//******输出列头******/for (int i = 0; i < colNamesArr.length; i++) {buf.append(colNamesArr[i]).append(CSV_COLUMN_SEPARATOR);}buf.append(CSV_RN);if (null != dataList) {/******输出数据******/for (int i = 0; i < dataList.size(); i++) {for (int j = 0; j < mapKeyArr.length; j++) {buf.append(dataList.get(i).get(mapKeyArr[j])).append(CSV_COLUM_TABLE).append(CSV_COLUMN_SEPARATOR);}buf.append(CSV_RN);}}/******写出响应******/os.write(buf.toString().getBytes("GBK"));os.flush();return true;} catch (Exception e) {logger.error("doExport错误...", e);}return false;}/*** 设置响应格式* @param fileName* @param response* @throws UnsupportedEncodingException*/public static void responseSetProperties(String fileName, HttpServletResponse response) throws UnsupportedEncodingException {/******设置文件后缀******/SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String fn = fileName + sdf.format(new Date()).toString() + ".csv";/******读取字符编码******/String utf = "UTF-8";/******设置响应******/response.setContentType("application/ms-txt.numberformat:@");response.setCharacterEncoding(utf);response.setHeader("Pragma", "public");response.setHeader("Cache-Control", "max-age=30");response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fn, utf));}
}

导出CSV文件

    @GetMapping("/exportFailureRecord")public void exportFailureRecord(String batchNumber, HttpServletResponse response) {if (StringUtils.isBlank(batchNumber)) {log.warn("失败记录导出失败,批次号为空...");return;}//这里根据你的业务查询出数据List<ImportFailureRecord> list = importFailureRecordService.selectList(new EntityWrapper<ImportFailureRecord>().eq("is_delete", 0).eq("batch_number", batchNumber));if (CollectionUtil.isEmpty(list)) {log.warn("未查询到可导出的数据...");return;}log.info("===========查询到{}条可导出数据==============", list.size());String sTitle = "用户姓名,手机号,失败原因";String fName = "xxx失败记录数据_";String mapKey = "userName,userPhone,failureReason";List<Map<String, Object>> dataList = new ArrayList<>();for (ImportFailureRecord data : list) {Map<String, Object> map = new HashMap<>();map.put("userName", data.getUserName() == null ? "" : data.getUserName());map.put("userPhone", data.getUserPhone() == null ? "" : data.getUserPhone());map.put("failureReason", data.getFailureReason() == null ? "" : data.getFailureReason());dataList.add(map);}try (final OutputStream os = response.getOutputStream()) {log.info("=============失败记录导出开始============");FileExport.responseSetProperties(fName, response);FileExport.doExport(dataList, sTitle, mapKey, os);log.info("=============失败记录导出结束============");} catch (Exception e) {log.error("导出失败记录数据失败", e);}}

方法二

/*** 描述:下载外部案件导入模板* @param response* @param request* @author songfayuan* 2018年6月7日下午5:03:59*/@RequestMapping("/downloadExcel")@ResponseBodypublic void downloadExcel(HttpServletResponse response,HttpServletRequest request) {//方法一:直接下载路径下的文件模板(这种方式貌似在SpringCloud和Springboot中,打包成JAR包时,无法读取到指定路径下面的文件,不知道记错没,你们可以自己尝试下!!!)try {//获取要下载的模板名称String fileName = "ApplicationImportTemplate.xlsx";//设置要下载的文件的名称response.setHeader("Content-disposition", "attachment;fileName=" + fileName);//通知客服文件的MIME类型response.setContentType("application/vnd.ms-excel;charset=UTF-8");//获取文件的路径String filePath = getClass().getResource("/template/" + fileName).getPath();FileInputStream input = new FileInputStream(filePath);OutputStream out = response.getOutputStream();byte[] b = new byte[2048];int len;while ((len = input.read(b)) != -1) {out.write(b, 0, len);}//修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击"是"response.setHeader("Content-Length", String.valueOf(input.getChannel().size()));input.close();//return Response.ok("应用导入模板下载完成");} catch (Exception ex) {logger.error("getApplicationTemplate :", ex);//return Response.ok("应用导入模板下载失败!");}//方法二:可以采用POI导出excel,但是比较麻烦(这里类似方法一)/*try {Workbook workbook = new HSSFWorkbook();request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("application/x-download");String filedisplay = "导入模板.xls";filedisplay = URLEncoder.encode(filedisplay, "UTF-8");response.addHeader("Content-Disposition", "attachment;filename="+ filedisplay);// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  Sheet sheet = workbook.createSheet("导入模板");// 第三步,在sheet中添加表头第0行Row row = sheet.createRow(0);// 第四步,创建单元格,并设置值表头 设置表头居中 CellStyle style = workbook.createCellStyle();  style.setAlignment(CellStyle.ALIGN_CENTER); // 创建一个居中格式 Cell cell = row.createCell(0);  cell.setCellValue("商品名称");  cell.setCellStyle(style); sheet.setColumnWidth(0, (25 * 256));  //设置列宽,50个字符宽cell = row.createCell(1);  cell.setCellValue("商品编码");  cell.setCellStyle(style); sheet.setColumnWidth(1, (20 * 256));  //设置列宽,50个字符宽cell = row.createCell(2);  cell.setCellValue("商品价格");  cell.setCellStyle(style);  sheet.setColumnWidth(2, (15 * 256));  //设置列宽,50个字符宽cell = row.createCell(3);  cell.setCellValue("商品规格");  cell.setCellStyle(style);  sheet.setColumnWidth(3, (15 * 256));  //设置列宽,50个字符宽// 第五步,写入实体数据 实际应用中这些数据从数据库得到row = sheet.createRow(1);row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(1);  row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(2); row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(3);   //商品价格row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(4);  //规格// 第六步,将文件存到指定位置  try  {  OutputStream out = response.getOutputStream();workbook.write(out);out.close();  }  catch (Exception e)  {  e.printStackTrace();  }  } catch (Exception e) {e.printStackTrace();}*/}

模板位置:

Java从服务端下载Excel模板文件相关推荐

  1. java excel模板 下载_Java从服务端下载Excel模板文件

    /** * 描述:下载外部案件导入模板 * @param response * @param request * @author songfayuan * 2018年6月7日下午5:03:59 */ ...

  2. vue下载excel模板文件,excel读取

    一.下载excel模板文件 <template><a-button type="primary" @click="downloadExcel" ...

  3. Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...

  4. java从项目里下载excel模板

    从本地项目中下载excel模版 @RequestMapping(value = "/downloadExcelByName", method = RequestMethod.GET ...

  5. Java 使用poi自定义下载Excel模板

    poi自定义Excel模板 设置下拉框以及悬浮提示信息 首先导入maven依赖 <dependency><groupId>org.apache.poi</groupId& ...

  6. springboot打成Jar包下载Excel模板文件损坏问题

    最近遇到Springboot环境项目打成jar后下载Excle文件出现损坏问题,我是在网上找了这种方法解决的: String fileName = "aaa.xlsx"; Clas ...

  7. java imapi_java服务端下载证书并放入证书库后,仍出现No trusted certificate found错误...

    我下载了证书后,利用keytool工具先这样: Keytool –genkey –alias "certificate" –keyalg "RSA" –keys ...

  8. java hutool poi 基于excel模板文件,填充数据的思路

    需求 用户可下载excel模板文件,填充数据后上传,也可以下载已上传所有数据的excel,模板文件和含数据excel,都有列头及列说明:由此想到模板文件和含数据excel共用一份excel模板,下载数 ...

  9. Java动态生成excel模板文件(包含列下拉)

    1.添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><gr ...

最新文章

  1. 使用SQL语句UPDATE数据,怎样知道是否UPDATE成功
  2. c#_Func和Action委托简介
  3. asp.net 导出excel带图片
  4. numpy拼接_巧用numpy切分图片
  5. 联通 培训 c班还 20190814
  6. C语言存储空间布局以及static解析
  7. hbase hmaster启动起来就自动关闭
  8. MVP登录和注册页面Activity类 生成二维码 异常捕获类
  9. override(C# 参考)
  10. 数据库中查询的各种连接(左连接,右连接,全连接,内连接,交叉连接,自连接)...
  11. 常用和不常用端口一览表
  12. 一款好用得国产SSH工具——FinalShell
  13. mac下复制粘贴需要多次的问题
  14. VO、DTO、BO、DO、PO、POJO、Entity的概念、区别和应用
  15. Python 文件,文件读取一行(readline)
  16. 在win7下面安装ubuntu 16.04.4双系统
  17. 通过Iconfont在线调用项目图标
  18. x*=3+5**2的计算结果python_下面代码的执行结果是________ x = 2 x *= 3 + 5**2
  19. Python基础:字符集和编码
  20. Python爬虫示例:爬取 13 个旅游城市,看看大家放假了都爱去哪玩

热门文章

  1. 进阶版的Pandas数据分析神器:Polars
  2. Unity实现AR扫描图片
  3. 四川交通职业技术学院计算机二级,明天考计算机了。
  4. 云计算与大数据复习题
  5. 扛住时间,不负自我,37岁自学计算机语言-Python的后果
  6. 教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)
  7. qt离线下载地址5.14.2
  8. SaaSBase:免费的思维导图软件:2022年9种最好的工具
  9. SAS对决Ultra320(下):MAX3147RC小胜Ultrastar 15K147
  10. 让搜索引擎收录hexo博客 | hexo