Excel导出,简单易懂

直接上代码!
依赖包,下面依赖包已封装poi相关依赖包,很好用。

     <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>1.1.2-beta5</version></dependency>

导出Excel工具类,此处代码可以复制。

   /*** 写入Office2017格式的xlsx文件* @param data 要写入的数据* @param outFile 输出文件路径* @throws IOException*/public static void writeXlsx(List<List<String>> head, List<List<Object>> data, String outFile, String sheetName) throws IOException {log.info("导出数据到文件:{}", outFile);File file = new File(outFile);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}OutputStream out = new FileOutputStream(outFile);ExcelWriter writer = EasyExcelFactory.getWriter(out,ExcelTypeEnum.XLSX,true);//写第一个sheet, sheet1  数据全是List<String> 无模型映射关系Sheet sheet1 = new Sheet(1, 3);sheet1.setSheetName(sheetName);sheet1.setStartRow(0);//设置列宽 设置每列的宽度sheet1.setHead(head);sheet1.setAutoWidth(Boolean.TRUE);writer.write1(data, sheet1);writer.finish();out.close();}

表头数据,注意:看返回值: List<List<‘String’>>。此处代码建议别复制。
如图:

/*** Excel模板* 表头数据* @return*/private List<List<String>> payExcel() {List<List<String>> head = new ArrayList<List<String>>();List<String> headColumn1 = new ArrayList<String>();List<String> headColumn2 = new ArrayList<String>();List<String> headColumn3 = new ArrayList<String>();List<String> headColumn4 = new ArrayList<String>();List<String> headColumn5 = new ArrayList<String>();List<String> headColumn6 = new ArrayList<String>();List<String> headColumn7 = new ArrayList<String>();
//        List<String> headColumn8 = new ArrayList<String>();List<String> headColumn9 = new ArrayList<String>();List<String> headColumn10 = new ArrayList<String>();List<String> headColumn11 = new ArrayList<String>();List<String> headColumn12 = new ArrayList<String>();List<String> headColumn13 = new ArrayList<String>();List<String> headColumn14 = new ArrayList<String>();List<String> headColumn15 = new ArrayList<String>();List<String> headColumn16 = new ArrayList<String>();List<String> headColumn17 = new ArrayList<String>();List<String> headColumn18 = new ArrayList<String>();headColumn1.add("交易时间");headColumn2.add("支付流水号");headColumn3.add("商户订单号");headColumn4.add("商户编号");headColumn5.add("商户名称");headColumn6.add("直属代理商");headColumn7.add("支付方式");
//        headColumn8.add("银行类型");headColumn9.add("交易金额");headColumn10.add("交易状态");headColumn11.add("费率");headColumn12.add("手续费");headColumn13.add("结算金额");headColumn14.add("结算周期");headColumn15.add("支付通道");headColumn16.add("通道流水号");headColumn17.add("设备类型");headColumn18.add("设备编码");head.add(headColumn1);head.add(headColumn2);head.add(headColumn3);head.add(headColumn4);head.add(headColumn5);head.add(headColumn6);head.add(headColumn7);
//        head.add(headColumn8);head.add(headColumn9);head.add(headColumn10);head.add(headColumn11);head.add(headColumn12);head.add(headColumn13);head.add(headColumn14);head.add(headColumn15);head.add(headColumn16);head.add(headColumn17);head.add(headColumn18);return head;}

获取数据库的数据进行加工处理,这里是需要注意一下:从数据库获取数据的时候,有些字段可能是空值,如果不处理空值就会导致导出Excel里数据排版出现错乱现象。下面代码已做处理,如果为空 -> “无”,此处代码建议别复制

public JSONObject outPayExcel(QueryListRequest<TmPayOrderDto> request) {request = request == null?new QueryListRequest<>():request;TmPayOrderDto params = request.getParams();params = params == null?new TmPayOrderDto():params;//获取数据库数据List<TmPayOrderVo> list =  tmPayOrderMapper.outPayExcelList(params);//文件名String fileName = "支付订单" + System.currentTimeMillis() + ".xlsx";//文件路径String filePaht = "F:" ;try {if (list != null && !list.isEmpty()) {//最终数据存放在此对象里List<List<Object>> object = new ArrayList<>();//对数据进行加工for (TmPayOrderVo data : list) {if (data != null) {List<Object> da = new ArrayList<>();// 交易时间Date tradeDatetime = data.getTradeDatetime();da.add(tradeDatetime);// 支付流水号Long payOrderNo = data.getPayOrderNo();da.add(stringValue(payOrderNo));// 商户订单号String mchPayOrderNo = data.getMchPayOrderNo();da.add(stringValue(mchPayOrderNo));// 商户编号Long sellerId = data.getSellerId();da.add(stringValue(sellerId));// 商户名称String sellerName = data.getSellerName();da.add(sellerName);// 直属代理商String platformName = data.getPlatformName();da.add(platformName);// 支付方式/*01-账户余额、02-支付宝、03-微信、04-银联、05-银联云闪付*/String payMethod = data.getPayMethod();if("01".equals(payMethod)){da.add("账户余额");}else if ("02".equals(payMethod)){da.add("支付宝");}else if ("03".equals(payMethod)){da.add("微信");}else if ("04".equals(payMethod)){da.add("银联");}else if ("05".equals(payMethod)){da.add("银联云闪付");}// 银行类型 -暂时没有
//                        da.add(" ");// 交易金额BigDecimal payMoney = data.getPayMoney();da.add(payMoney);// 交易状态/*00-支付中、01-支付成功、02-支付失败*/String payStatus = data.getPayStatus();if("00".equals(payStatus)){da.add("支付中");}else if ("01".equals(payStatus)){da.add("支付成功");}else if ("02".equals(payStatus)){da.add("支付失败");}// 费率String shRate = data.getShRate();if (!StringUtils.isBlank(shRate)){da.add(shRate);}else {da.add("0.00");}// 手续费String poundage = data.getPoundage();if (!StringUtils.isBlank(poundage)){da.add(poundage);}else {da.add("0.00");}// 结算金额String settlementAmount = data.getSettlementAmount();if (!StringUtils.isBlank(settlementAmount)){da.add(settlementAmount);}else {da.add("0.00");}// 结算周期String settlementCycle = data.getSettlementCycle();if("01".equals(settlementCycle) || "02".equals(settlementCycle)|| "03".equals(settlementCycle) || "04".equals(settlementCycle)|| "05".equals(settlementCycle) || "06".equals(settlementCycle)|| "07".equals(settlementCycle) || "08".equals(settlementCycle)){da.add("D1");}else if("11".equals(settlementCycle) || "12".equals(settlementCycle)){da.add("D0");}else {da.add("无");}// 支付通道String chlName = data.getChlName();if (!StringUtils.isBlank(chlName)){da.add(chlName);}else {da.add("无");}// 通道流水号String chlPayRespSerialNo = data.getChlPayRespSerialNo();if (!StringUtils.isBlank(chlPayRespSerialNo)){da.add(chlPayRespSerialNo);}else {da.add("无");}// 设备类型/*01-刷卡POS、02-智能POS、03-扫码POS、04-云播报、05-刷脸支付*/String equipType = data.getEquipType();if("01".equals(equipType)){da.add("刷卡POS");}else if ("02".equals(equipType)){da.add("智能POS");}else if ("03".equals(equipType)){da.add("扫码POS");}else if ("04".equals(equipType)){da.add("云播报");}else if ("05".equals(equipType)){da.add("刷脸支付");}else {da.add("无");}// 设备编码String equipSn = data.getEquipSn();if (!StringUtils.isBlank(equipSn)){da.add(equipSn);}else {da.add("无");}object.add(da);}}//调Excel导出工具类WriteExcelUtil.writeXlsx(payExcel(), object, filePaht + "/" + fileName, "支付订单导出数据");}} catch (IOException e) {log.error("导出数据失败:", e);}JSONObject jsonObject = new JSONObject();jsonObject.put("status", "200");jsonObject.put("fileName", fileName);jsonObject.put("fileUrl", filePaht + "/" + fileName);return jsonObject;}

在此Excel导出已经完了,额。。。。还有一点没弄就是下载Excel了。此处代码可以复制

public static void downProcessFile (HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {InputStream fis = null;OutputStream os = null;//Excel导出的路径String filePath = request.getParameter("pathUrl");filePath = java.net.URLDecoder.decode(filePath, "UTF-8");try {File file = new File(filePath);// 获取日志文件名称String fileName = file.getName();fis = new BufferedInputStream(new FileInputStream(filePath));byte[] buffer = new byte[fis.available()];fis.read(buffer);response.reset();// 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
//            response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.replaceAll(" ", "").getBytes("utf-8"),"iso8859-1"));
//            response.addHeader("Content-Length", "" + file.length());response.setContentType("application/octet-stream");response.setHeader("content-type", "application/octet-stream");response.setHeader("Content-Disposition","attachment;filename="+ java.net.URLEncoder.encode(fileName, "UTF-8"));os = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");// 输出文件os.write(buffer);os.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (os != null) {os.close();}if (fis != null) {fis.close();}} catch (Exception e) {e.printStackTrace();}}}

Excel导出,简单易懂相关推荐

  1. yii2 php excel 导出,简单,易用的yii2导入和导出组件( illusion/yii2-excel)

    Uncaught TypeError: last.size is not a function 先来说说写这个组件的初衷,接触yii2不是很久,在项目中刚好有这样一个excel导入导出的需求,筛选了多 ...

  2. php mysql生成excel文件,PHP导出MySQL数据到Excel文件简单示例

    这篇文章主要为大家详细介绍了PHP导出MySQL数据到Excel文件简单示例,具有一定的参考价值,可以用来参考一下. 对phpPHP导出MySQL数据到Excel文件简单示例感兴趣的小伙伴,下面一起跟 ...

  3. 简单实现thinkPHP的excel导出

    @Zheng 简单实现thinkPHP的excel导出 excel实现导出就两步 1.定义一个公共方法 /** * 直接导出需要生产的内容 * @param $field * @param $list ...

  4. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  5. 使用EasyPoi 导出简单的Excel表格。

    最近一个项目用到了到处Excel表格. 1.首先 通过Maven 添加jar包. <!--导出excel--><dependency><groupId>org.je ...

  6. EasyPoi的excel模板预览与下载、导出简单/复杂数据

    官方文档地址:easypoi官网,官方仅供参考,部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中,如图 excel模板预览代码 @GetMapping(" ...

  7. 导出简单Excel模板(通用)

    poi导出简单Excel模板(通用) 通用的表头模板下载,需要填入表头名称: main: String[] title = new String[]{"主合同号", "结 ...

  8. C#基于Npoi通过特性的方式导出简单数据到Excel或基于特性以及基于Excel模板导出数据到Excel以及从Excel中把数据导入到对象中

    导出数据到Excel表格以及从Excel表格中读取数据是我们日常开发很多情况都会遇到的,这里或许只是导出一些简单的数据到excel,这里或许会按照一定的模板导出数据到excel,这里也可能需要从Exc ...

  9. 简单的Excel导出(两种方式)

    最近项目里面有个周报Excel导出的功能,为了解决这个问题,我显示调研Excel内核的方式实现了,但是被告知该方法有诸多弊端(1.服务器需要装相应版本的Excel:2.如果程序中途出错服务器会有很多E ...

  10. Java使用EasyExcel导出简单、复杂excel,以及多个excel打包导出下载zip

    EasyExcel是一款阿里开源的一款非常优秀Excel导入导出工具,使用内存小,处理速度快,使用方便,正好最近项目中有用到多个excel导出下载的功能,便记录下 EasyExcel使用git地址:G ...

最新文章

  1. 打造全能的文本编辑器序列文章
  2. python【数据结构与算法】B树概念解析和实现
  3. js 正则判断字符串是否为字母或数字
  4. https://www.unimelb.edu.au/
  5. 分布式事务:两段式提交(最终一致性)
  6. Boost:boost::callable_traits::function_type_t的测试程序
  7. java vtd-xml_在java中使用vtd-xml获取xml中的属性文本
  8. 服务器返回一个无效的JSON string,处理
  9. 图解算法学习笔记(八):贪婪算法
  10. 引入外部机构需要注意的事项_如何与外部营销机构合作
  11. 【网络流24题----01】飞行员配对方案问题
  12. 21天Jmeter打卡Day10线程用户之setUp和tearDown
  13. struts 2.3.8备忘
  14. Atitit 搜索工程师的知识点体系总结 目录 1.1. 理论类 索引 与查询 1 1.2. 类库类 1 1.3. 关联知识类 1 1.4. 其他 1 2. Ref 2 2.1. Atitit 文
  15. jQuery实现button按钮提交表单
  16. PDF预览之PDFObject.js总结
  17. Hi3519AV100 sdk 介绍
  18. python黑白方格画
  19. ubuntu下给谷歌chrome浏览器添加去广告的插件
  20. Silverlight 2学习教程(四):Chiron.exe:Silverlight 2打包和动态语言部署工具

热门文章

  1. 一、 WIN32程序
  2. 2022年软件工程师报告出炉,年薪最高的是...
  3. 何为挂载(mount)?
  4. java aspose 给Word添加水印
  5. 人脸识别支付欺诈手段和防范措施
  6. 不是忽悠?国产16nm八核处理器来了
  7. 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
  8. 【父亲节故事】32岁入门学习编程的父亲给我的启示
  9. 「镁客·请讲」小库科技何宛余:用人工智能去更高效的协助建筑设计工作
  10. react class的写法