导出excel整理

开发中难免会遇到要导出数据到excel的,网上有很多方法,但是看起来都很复杂的样子,写得又非常多代码,让人望而止步.我做一个简单的导出excel表格功能.这是我在工作上用到的.

1.需要用到的jar

<dependency>
   <groupId>net.sourceforge.jexcelapi</groupId>
   <artifactId>jxl</artifactId>
   <version>2.6.10</version>
</dependency>

我将会从前端请求开始一直到controller的测试方法,最后到工具类.

首先是前端页面,我用的是layui,项目使用的框架是springboot+springcloud,对这个导出功能没有太大影响,在其他框架也是可以用的,除非你的不是maven,那也无所谓,下载jar就可以了.

前端页面js如下:

自己写一个跳转发方法,跳转到controller触发导出方法

Controller中的方法,代码如下:

这是我做的一个测试代码,数据都是随便填写,如果是从数据库查询到的数据,自己做个改动就可以了,这些都是简单的,我就不做演示.

    @RequestMapping(value = "exportStatisticsReport", method = RequestMethod.GET)public void exportStatisticsReport(HttpServletRequest request, HttpServletResponse response){Map<String,Object> map = getParameterNames(request);//使用LinkedHashMap,因为这个是有序的mapLinkedHashMap<String,Object> reportData = new LinkedHashMap<>();//装载数据,就是要导出到excel的数据reportData.put("test1","流水号");reportData.put("test2","辖区");reportData.put("test3","业务状态");reportData.put("test4","企业名称");reportData.put("test5","网点");//把要导出到excel的数据的LinkedHashMap装载到这个List里面,这是导出工具类要求封装格式.List<Map<String, Object>> exportData = new ArrayList<>();exportData.add(reportData);//表格列名用ArrayList装载List<String> columns = new ArrayList<>();//设置excel表格中的列名columns.add("流水号");columns.add("辖区");columns.add("业务状态");columns.add("企业名称");columns.add("网点");//点击导出按钮的时候,页面上显示的标题,同时也是sheet的名称String filename ="测试导出excel";try {//处理一下中文乱码问题response.setHeader("Content-Disposition", "attachment;filename="+new String(filename.getBytes("gb2312"), "ISO8859-1")+".xls");} catch (UnsupportedEncodingException e) {e.printStackTrace();}//以上均为数据准备,下面开始调用导出excel工具类ExportExcel.exportToExcel(response, exportData, filename, columns);}

最后,我们再来看看导出excel的工具类

至于工具类中是如何实现的,我们不需要去关心,里面的注释我写得非常清楚,有兴趣的可以去看看.我们要关注的是该方法的参数列表.

这个方法需要用到的参数有以下4个:

1.HttpServletResponse response:这个不用解释吧

2.List<Map<String, Object>> objData:这个是装载要导出到excel的数据,在controller方法里面已经写得非常清楚.

3.String sheetName:这个是excel表格中sheet的名称,同时也可以作为下载的时候显示的文件名.

4.List<String> columns:这个参数是装载excel表格列名的集合,在controller方法里面也写得非常清楚了.

我们只要按照方法参数规定的格式提供参数给方法,就可以了.

导出excel工具类中的第一个方法代码如下:   下面这个代码看看就好,要用的时候直接拿去用

这个工具类可以在这里下载:

https://gitee.com/qsa2019/export_excel_tool_class.git

public class ExportExcel {public static int exportToExcel(HttpServletResponse response,List<Map<String, Object>> objData, String sheetName,List<String> columns) {int flag = 0;//声明工作簿jxl.write.WritableWorkbookWritableWorkbook wwb;try {//根据传进来的file对象创建可写入的Excel工作薄OutputStream os = response.getOutputStream();wwb = jxl.Workbook.createWorkbook(os);/** 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表* 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样* 代码中的"0"就是sheet1、其它的一一对应。* createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置*/WritableSheet ws = wwb.createSheet(sheetName, 0);SheetSettings ss = ws.getSettings();ss.setVerticalFreeze(1);//冻结表头WritableFont font1 = new WritableFont(WritableFont.createFont("微软雅黑"), 10, WritableFont.BOLD);// WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);WritableCellFormat wcf = new WritableCellFormat(font1);// WritableCellFormat wcf2 = new WritableCellFormat(font2);// WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体//创建单元格样式//WritableCellFormat wcf = new WritableCellFormat();//背景颜色// wcf.setBackground(jxl.format.Colour.YELLOW);
//            wcf.setAlignment(Alignment.CENTRE);  //平行居中
//            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中//  wcf3.setAlignment(Alignment.CENTRE);  //平行居中//  wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中//  wcf3.setBackground(Colour.LIGHT_ORANGE);// wcf2.setAlignment(Alignment.CENTRE);  //平行居中// wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中/** 这个是单元格内容居中显示* 还有很多很多样式*///   wcf.setAlignment(Alignment.CENTRE);//判断一下表头数组是否有数据if (columns != null && columns.size() > 0) {//循环写入表头for (int i = 0; i < columns.size(); i++) {ws.setColumnView(i, 28);//设置列宽
//                    ws.setRowView(i+1, 600, false); //设置行高/** 添加单元格(Cell)内容addCell()* 添加Label对象Label()* 数据的类型有很多种、在这里你需要什么类型就导入什么类型* 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label* Label(i, 0, columns[i], wcf)* 其中i为列、0为行、columns[i]为数据、wcf为样式* 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中*/ws.addCell(new Label(i, 0, columns.get(i), wcf));}//判断表中是否有数据if (objData != null && objData.size() > 0) {//循环写入表中数据for (int i = 0; i < objData.size(); i++) {//转换成map集合{activyName:测试功能,count:2}Map<String, Object> map = objData.get(i);//循环输出map中的子集:既列值int j = 0;DecimalFormat decimalFormat = new DecimalFormat("0.00");ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();for (Object o : map.keySet()) {//ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)String content = "";if (map.get(o).toString().contains(".") && CommonUtils.isNumber(map.get(o).toString())) {content = decimalFormat.format(Float.valueOf(map.get(o).toString()));ws.addCell(new Label(j, i + 1, content));} else if (map.get(o).toString().contains("-") && map.get(o).toString().contains(":")) {content = String.valueOf(map.get(o)).split("\\.")[0];ws.addCell(new Label(j, i + 1, content));}//图片处理
//                            else if (map.get(o).toString().contains("http") || map.get(o).toString().contains("https")){
//                                ws.setColumnView(j, 15);//设置列宽
//                                String path ="/resources/"+ String.valueOf(map.get(o)).split("upload/")[1];
//                                File imgFile = new File(path);
//                                WritableImage image = new WritableImage(j,i+1,1,1,imgFile);
//                                ws.addImage(image);
//                            }else {content = String.valueOf(map.get(o));ws.addCell(new Label(j, i + 1, content));}j++;}/* for(int b=0;b<map.size();b++){ws.addCell(new Label(b,i+1,String.valueOf(map.get(String.valueOf(b)))));}*/}} else {flag = -1;}//写入Exel工作表wwb.write();//关闭Excel工作薄对象wwb.close();//关闭流os.flush();os.close();}} catch (IllegalStateException e) {System.err.println(e.getMessage());} catch (Exception ex) {flag = 0;ex.printStackTrace();}return flag;}

最后测试一下:

点击导出按钮,页面底部就出现这个:说明导出成功!!!

java导出数据到excel表格的最简单实现相关推荐

  1. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...

    如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...

  2. 如何导出数据到Excel表格

    开发工具与关键技术:Visual Studio.MVC 作者:幻奏 撰写时间:2019.5.5 我们在日常的生活中常常会看到很多的数据,有时,我们不一定只是在项目里面看到数据,可能我们还要在其他的地方 ...

  3. Java导出数据到Excel文件

    Java导出数据到Excel文件 前言 如何导出 导出的基本流程 测试结果 测试数据及结果 测试代码 ExcelExportUtil.class 遇到的问题 lombok的问题 解决 Cell.set ...

  4. 如何在 Vue 中导出数据至 Excel 表格 - 卡拉云

    本文首发:<如何在 Vue 中导出数据至 Excel 表格 - 卡拉云> 我们经常需要在 Vue 搭建的后台管理系统里导出数据到 Excel / CSV ,方便我们将数据共享给其他同学或在 ...

  5. 从浏览器里面的数据导出数据到Excel表格

    从浏览器里面的数据导出数据到Excel表格 开发工具与关键技术:Visual Studio 2015 作者:李仁海 撰写时间:2019.5.5 一. 导出数据到Excel表格 1. public.加上 ...

  6. c#使用NPOI批量导出数据到excel表格里

    背景 我之前是做的Java开发的相关工作,c#开发还是第一次. 公司有这个需求,只好研究一下了. 我接手的是别人开发过两个报表的小玩意,万事开头难,刚开始为了搞清楚这些代码的意思走了不少弯路,下面说说 ...

  7. php 输入表格数据,怎样将导出数据输入Excel 表格-php 怎么把数据导出到excel表格...

    如何将word文档中的数据导入到excel表格中 方法如下: 1.首先,打开媒介工具"记事本",将word文件里需要导入的数据,复制粘贴到记事本当中,然后保存成为txt文件,本例中 ...

  8. android导出excel文件名称,android 导出数据到excel表格文件

    这是一个导出 excel表格的功能 从创建数据库 到导出表格到文件管理 package com.ldm.familybill; import java.io.File; import java.tex ...

  9. ant 改变表格数据_React ant design表格导出数据为EXCEL表格数据

    一.由于公司项目需要,需要将表格数据导出为EXCEL表格数据.环境React+Ant Design 二.安装插件js-export-excel yarn安装-记得以管理员身份执行 yarn add j ...

最新文章

  1. java修炼手册3.8_Java修炼手册
  2. SAP RETAIL初阶之事务代码MP83 显示一个预测参数文件
  3. linux vnc xstartup,vnc 远程桌面选择的配置 xstartup
  4. 面试遇到职场PUA,只能说兄弟你还嫩了点
  5. 程序员过关斩将——搞定秒杀,只需要这几步!!
  6. 基本数据类型范围大小字节大小
  7. 【转】十八个绝招把你从压力中营救出来
  8. 微信数据解密-dat查看-免费dat转图片
  9. ABB机器人Test指令
  10. 渗透测试国内外研究_《混凝土与水泥制品》2020第8期——“混凝土研究”栏目...
  11. 2021第十二届蓝桥杯大赛软件赛省赛C++ B组真题题解
  12. Python实现两个有序集合的交集和并集
  13. python制作好看的界面_python漂亮界面
  14. 【LaTeX】MikTex+TexStudio安装及配置论文写作环境
  15. Linux常用环境软件安装(提供对应安装包)
  16. [附源码]计算机毕业设计Node.js红叶装潢公司员工管理系统(程序+LW)
  17. 苹果计算机能打出分数吗,Apple M1芯片安兔兔跑分曝光:分数打破安兔兔记录
  18. 通信原理 day8,day9:第五章:数字基带传输系统的组成;常用基带信号传输码型;数字基带信号的功率谱;无码间串扰;无码间串扰系统;预编码
  19. 前端 - JavaScript(基础语法)
  20. 如何录制微课?简单,手把手教你:教学微课视频如何录制

热门文章

  1. php事件的应用场景,php观察者模式应用场景实例详解
  2. jojo第七部dio怎么复活_JOJO:DIO才是第七部的大善人,从未夺人性命
  3. 扫地机器人石头爬坡_3年进化——“石头扫地机器人T65”与“米家扫地机器人”对比评测...
  4. 市场增速超20%,国产操作系统“浴火重生” | 解读操作系统的 2022
  5. 2021年全球液化石油气(LPG)收入大约176030百万美元,预计2028年达到226040百万美元
  6. Linux下MQ安装步骤及MQ常用命令
  7. 阿里云数据库独有功能
  8. Java 检查内存溢出方法
  9. 华为平板m5升级鸿蒙,华为平板M5高分屏长续航,关键还能变电脑
  10. Android开源绘画板(普通绘画模式和可缩放模式)——秒学自定义View和触摸事件原理...