本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的。

例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件。需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sql,从数据库中进行查询;得到数据(跟前台查询到的数据一致,这里我演示的查询出来的数据为一个list对象集合),再生成excl文件(数据在文件里面,文件名称,位置,内容,都可更改)。

第一步:后台得到前台查询条件并查询出数据(这个步骤没啥要写的

1.后台得到前台页面的数据。你可以使用json传递值,也可以用url传递。你想用哪个就用哪个。毕竟达者为先

json传递值例子:(写的例子,可能跟后面数据对不上,但是意思对就行了)

var data = $("#fromid").serializeObject();//表单变为json格式字符串
//没有form表单的可以自己认为创建一个json字符串
//var data = jQuery.parseJSON('{"FPHM":null,"FDBH":null}');
data["FPHM"]=FPHMs;//页面的查询条件,将data传递到后台
data["FDBH"]=_FDBH;
$.ajax({        beforeSend: function(xhr){xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token"));},       url: "",//你的url      type: "post",      contentType: 'application/json;charset=utf-8',       dataType: "json",     data: JSON.stringify(data),//传递格式为json格式        success: function(data){               $.messager.alert("提示","成功"+data,"info");           },     async: true,        error: function(er) {}
});

url传递,(这个就简单了,就是平常的url,就是给后面组装上参数和对应的数据,本文主要不是讲传递,只是一个演示例子)

例子:

function clickdown(){//这里演示传递两个参数  var prnteTest=document.getElementById("prnte").value;   var prnteName=document.getElementById("prnteName").value;  location.href='url?prnteTest='+prnteTest+'&prnteName='+prnteName;
}

2.得到数据库中的查询数据(这个也不是太重要,也简单写了

这个就是sql语句了,这个怎么演示呀,就是sql呗,你们想要生成什么数据,就sql查呗。

我主要不是为了怎么解析json格式数据,我使用的url传递数据使用

String name = request.getParameter("name");

这种格式得到数据,

如果为json格式传递到后台,数据形如

{ "name": 3,"post": 1 , "rows": [{"JLBH":30005,"HTH":40200,"WLDW":"0316","NAME":"深圳市控股公司","DTID":585,"DT_NAME":"珠宝采购","FKJE":234.0}]}

可以使用下面的进行解析

JSONObject jsonObj = JSONObject.fromObject(data);
Stringname =jsonObj.getParameter("name");

如果上面方法不能够解析json格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个)。

得到数据之后,组装sql语句,在数据库中查询即可,这里不演示怎么查询的,结果为一个list集合里面存放着要导出的数据

第二步:生成excel文件

根据前台得到的条件,从数据库中得到数据,导出的表头

 /*** 测试 导出xls文件的表头   */ public static final String[] TestToXls = { "编号","设计人员工号", "设计人员姓名","开发人员工号", "开发人员姓名", "测试人员工号", "测试人员姓名"};

其中list存放的是一个对象,类似javaBean:

List<Test> listTest = new ArrayList<Test>();

形如:

public class Test{private String idd;//编号private String designId;//设计人员工号private String designName;//设计人员姓名private String developId;//开发人员工号private String developName;//开发人员姓名private String testId;//测试人员工号private String testName;//测试人员姓名//对应的set,get 省略
}

我使用的是Mybatis,其中有一个resultType,为返回类型。

形如:

<select id="findAllUser"parameterType="java.util.Map"resultType="com.test.Test" >select pr.qid as idd,--这里的as 后跟的, pr.des_id as designId, pr.des_name as designName,   pr.de_id as developId, pr.de_name as developName,   ps.te_id as testId, ps.te_name as testNamefrom ps_test_red pr left join ps_test_em ps on ps.id=pr.sys_id where pr.par_nme_te > #{prnte}--组装sql语句,查询出数据
</select>

导出文件方法

public void toExcel() {  //这里为导出文件存放的路径  String filePath ="C:\\Users\\USER" + UUID.randomUUID() + "\\";   //加入一个uuid随机数是因为    //每次导出的时候,如果文件存在了,会将其覆盖掉,这里是保存所有的文件    File file = new File(filePath);    if (!file.exists()) {       file.mkdirs();  }SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");  // 给要导出的文件起名为 "测试导出数据表_时间.xls"    String filePath2 = filePath + "测试导出数据表" + "_" + fmt.format(new Date()) + ".xls"; WritableWorkbook wb = null;    try {       File file2 = new File(filePath2);      if (!file2.exists()) {//不存在,创建           file2.createNewFile();      }       wb = Workbook.createWorkbook(file2);//创建xls表格文件// 表头显示WritableCellFormat wcf = new WritableCellFormat();      wcf.setAlignment(Alignment.CENTRE);// 水平居中      wcf.setWrap(true);      wcf.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中      wcf.setFont(new WritableFont(WritableFont.TIMES,13, WritableFont.BOLD));// 表头字体 加粗 13号      wcf.setBackground(jxl.format.Colour.PERIWINKLE);// 内容显示     WritableCellFormat wcf2 = new WritableCellFormat();        wcf2.setWrap(true);//设置单元格可以换行      wcf2.setAlignment(Alignment.CENTRE);//水平居中      wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中     wcf2.setFont( new WritableFont(WritableFont.TIMES,11));// 内容字体 11号//导出的xls的第一页,第二页就是0换成1,“sheet1”,也可以修改为自己想要的显示的内容WritableSheet ws = wb.createSheet("sheet1", 0);       //WritableSheet ws2 = wb.createSheet("sheet2", 1);//第2个sheet页        ws.addCell(new Label(0,0, "导出结果"));//代表着表格中第一列的第一行显示查询结果几个字// 导出时生成表头     for (int i = 0; i < TestToXls.length; i++) {//i,代表的第几列,1,代表第2行,第三个参数为要显示的内容,第四个参数,为内容格式设置(按照wcf的格式显示)            ws.addCell(new Label(i, 1, TestToXls[i],wcf));//在sheet1中循环加入表头}//查询出来的数据,这个方法是演示所用      String sql="com.Test.Service.findAllUser";//sql为mybatis框架下的路径        Map<String, Object> map = new HashMap<String, Object>();//map里为存放前台的条件map.put("prnte",  this.getParameter("prnteTest"));List<Test> listTest = TestService.findAllList(sql, map);int k =2 ;//从第三行开始写入数据for (int i = 0; i < listTest.size(); i++) {            ws.addCell(new Label(0, k, listTest.get(i).getIdd(), wcf2));ws.addCell(new Label(1, k, listTest.get(i).getDesignId(),wcf2));ws.addCell(new Label(2, k, listTest.get(i).getDesignName(),wcf2));ws.addCell(new Label(3, k, listTest.get(i).getDevelopId(),wcf2));ws.addCell(new Label(4, k, listTest.get(i).getDevelopName(),wcf2));ws.addCell(new Label(5, k, listTest.get(i).getTestId(),wcf2));ws.addCell(new Label(6, k, listTest.get(i).getTestName(),wcf2));//ws.mergeCells(4, 5, 5, 5);//合并两列,按参数顺序,意思是第4列的第五行,跟第五列的第五行合并为一个单元格           k++;      }       wb.write();//写入,到这里已经生成完成,可以在相应目录下找到刚才生成的文件   } catch (IOException e) {e.printStackTrace();   } catch (JxlWriteException e) {e.printStackTrace(); } catch (WriteException e) {e.printStackTrace();    } finally {     try {           if (wb != null) {wb.close();}      } catch (WriteException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}  }   //这个是我们项目中,是把刚才生成的文件,响应到前台,进行下载、保存,可省略。 downLoadFile(filePath2);
}

响应到前台(就是读取文件,网上很多)

public void downLoadFile(String filePath) {FileInputStream in = null;       ServletOutputStream out = null;        BufferedOutputStream toOut = null;     try {           in = new FileInputStream(new File(filePath));          byte[] buffer = new byte[in.available()];          while (in.read(buffer) != -1) {                HttpServletResponse response = this.getContext().getResponse();//从application中得到response               response.reset();// 清空              // 设置响应的文件的头文件格式response.setContentType("application/octet-stream");response.setHeader("Content-Disposition","attachment;filename="+ new String(fileName.getBytes("GBK"),"ISO8859-1"));response.addHeader("Content-type", "application-download");// 获取响应的对象流out = response.getOutputStream();toOut = new BufferedOutputStream(out);toOut.write(buffer);toOut.flush();}       } catch (Exception e) { e.printStackTrace();        } finally {try {if(in!=null) { in.close(); }               if(out != null) {out.close();}if(toOut != null) {toOut.close();}} catch (IOException e) {e.printStackTrace();}        }
}

导出文件大致为:

其中的jxl.jar 包在我的资源文件里面有链接地址: 点击打开链接(也可以博客留言,会及时回复)

使用java在后台将数据导出为excel文件相关推荐

  1. js导出的xlsx无法打开_vue将数据导出为excel文件就是如此简单

    前言: 在以前需要将数据导出为excel文件时,往往需要后端提供支持,后端导出后以文件流的形式进行下载.但也带了一些问题,如: 1. 代码量复杂,一般前端难以完成. 2. 实现数据导出往往会大量消耗服 ...

  2. dbeaver导出excel文件_vue将数据导出为excel文件就是如此简单

    前言: 在以前需要将数据导出为excel文件时,往往需要后端提供支持,后端导出后以文件流的形式进行下载.但也带了一些问题,如: 1. 代码量复杂,一般前端难以完成. 2. 实现数据导出往往会大量消耗服 ...

  3. 如何优化百万级别数据导出(excel 文件)

    如何优化百万级别数据导出(excel 文件) 背景 未优化前存在的问题 业务接口流程 优化后 业务接口流程(优化版v1) 业务接口流程(优化版v2) 优化效果 复盘 宏观层面 遇到的困难 收获 代码实 ...

  4. 使用SpringBoot+MongoDB数据导出为Excel文件

    MongoDB数据导出为Excel文件 注: 本文使用的是POI导出文件 导出数据两种创建工作簿的方式 // 创建工作簿 XSSFWorkbook wb = new XSSFWorkbook(); / ...

  5. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...

  6. python 导出大量数据到excel_怎么在python中将大量数据导出到Excel文件

    怎么在python中将大量数据导出到Excel文件 发布时间:2021-01-16 11:09:40 来源:亿速云 阅读:76 作者:Leah 这期内容当中小编将会给大家带来有关怎么在python中将 ...

  7. php mysql 导出到excel,php mysql数据导出到excel文件

    这篇文章主要为大家详细介绍了php mysql数据导出到excel文件,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 经测试代码如下: /** * ...

  8. Vue将echarts数据导出成excel文件

    Vue将echarts数据导出成excel文件 一.下载vendor插件 下载 vendor 文件放置项目的 src 目录下 链接:https://pan.baidu.com/s/1XYYQ186zo ...

  9. 数据导出到excel文件给客户端下载的几种方法

    (原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了.  Response.Clear();         Respons ...

最新文章

  1. Simulink仿真---SPWM算法
  2. angular具体用法及代码
  3. nvidia显卡cuda的性能_性能追平上代万元旗舰!NVIDIA GeForce RTX 3070规格解析
  4. 差分约束 【bzoj2330】[SCOI2011]糖果
  5. 构造可靠数据传输协议
  6. 阻止SPY++类似的程序捕捉软件窗口
  7. 嵌入式Linux系统编程学习之十九标准管道流
  8. 超炫彩光效数码产品线条感海报PSD分层模板,炫亮抓你眼球
  9. matlab案例 光学,MATLAB仿真及其在光学课程中的应用.pdf
  10. 快速获取废料_【优废回收】11月16日有色金属废料回收参考行情!
  11. 进阶14 File类、遍历、递归
  12. -TEST 20 for NOIP 。。。(80-300)-----(( ! ))
  13. 电子白板无法触摸怎么办?
  14. Unity3d实现阿拉伯语适配,不规则特殊字符的处理
  15. STM32学习笔记之硬件SPI读写与极性设置
  16. 圣斗士星矢限制服务器注册,圣斗士星矢服务器内BUG公告介绍
  17. spark SQL快速入门 1-9 慕课网
  18. Points-to analysis工具Doop的命令行参数
  19. 7.25学习记录-objection机制
  20. 如何从Matlab的fig文件中把数据导出来?

热门文章

  1. MT6129射频处理器,MT6129芯片原理资料介绍
  2. 个人Gmail跟MSN邮箱账号,怕忘记
  3. win10怎么修复dns配置?DNS配置错误无法上网怎么解决
  4. oracle19c集群重启,由重启引起的Oracle RAC节点宕机分析及追根溯源
  5. 软件测试就业前景怎么样?
  6. python小游戏之垃圾分类
  7. android休眠唤醒屏幕,Android屏幕的休眠和唤醒
  8. unity3d 图文并排--动态表情--超链接。
  9. 火狐浏览器添加自动阻止加密挖矿选项
  10. android手势控制动画,轻松实现Android,iOS的一个手势动画效果