引言

导出excel就是将后台的数据在数据库中查找出来,然后再将数据存放进excel表格中,这种操作多用于一些统计表中,将table中的数据导出来,存放进excel表格中.(最近在将手机中的短信往电脑中导出的时候,注意到导出来的文件就是一个excel表格,不得不说这个excel导入和导出的功能还是很强大的)
注:excel导入的技术可以在我的另一篇博客中去看https://blog.csdn.net/qq_36239350/article/details/84969607

话不多说,一起来看吧

两种方法的比较:

excel导出和Word导出也有两种方式,一种是前端导出,一种是后端导出,两种方法可以说是各有优劣吧,

  1. 首先是前端导出,这种方法是利用了第三方插件,他的优点是利用简简单单的几行代码就可以将一个table中的数据导出到excel表格中,所以说他很简洁,使用很方便,但是缺点也很明显,就是对于大量的数据,一页显示不下的数据,想要将所有的数据一次性全部都导出来就办不到了;
  2. 第二种后端导出的方法的优点就很明显了,他的优点是支持大数据量的导出,缺点是导出的代码很多,相对于前端导出比较繁琐

前端导出

前台导出:
引入js插件:<script src="${webpath }/static/js/tableExport.min.js" type="text/javascript"></script>
//excel导出function exportPageTable() {$('#table的ID').tableExport({type : 'excel',escape : 'false',fileName : '导出的文件名称'});$("#wordExcel").wordExport('导出的文件名称');}
完成!

很简单吧,就这样几行代码,就完成excel的导出了

后端导出

首先是工具类:

工具类:
package org.changneng.framework.frameworkcore.utils;import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.PropertyUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;/**
* 生成excel视图,可用excel工具打开或者保存
* 由ViewController的return new ModelAndView(viewExcel, model)生成
*/
public class ViewExcel extends AbstractExcelView {public void buildExcelDocument(Map model, HSSFWorkbook workbook,     HttpServletRequest request, HttpServletResponse response)     throws Exception {    String[] columnNames = (String[]) model.get("columnNames");String[] dbColumnNames = (String[]) model.get("dbColumnNames");String excelName = model.get("excelName")==null?"导出文件.xls":model.get("excelName").toString();String sheetName = model.get("sheetName")==null?"sheet1":model.get("sheetName").toString();// 设置response方式,使执行此controller时候自动出现下载页面,而非直接使用excel打开  response.setContentType("APPLICATION/OCTET-STREAM");  response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(excelName, "UTF-8"));    List resultList = (List) model.get("list");     // 产生Excel表头  HSSFSheet sheet = workbook.createSheet(sheetName);  //设置默认宽度、高度sheet.setDefaultColumnWidth(25);sheet.setDefaultRowHeight(new Short(400+""));HSSFRow header = sheet.createRow(0);//第一列是否为序号boolean flag = (Boolean)model.get("flag");int start = 0;int length = columnNames.length;// 第0行  // 产生标题列  if(flag){header.createCell((short) start).setCellValue("序号");   start++;}for(int i=0;i<columnNames.length;i++){header.createCell((short) start).setCellValue(columnNames[i]);   start++;}HSSFCellStyle cellStyle = workbook.createCellStyle();  cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));  writeContext(sheet, resultList, dbColumnNames,flag);}     private <T> void writeContext(HSSFSheet sheet, List<T> list,String[] dbColumnNames,boolean flag) {int rows = list.size();int cols = dbColumnNames.length;String columnName = null;Object value = null;try {for (int i = 0; i < rows; i++) {HSSFRow row = sheet.createRow(i+1);T t = (T) list.get(i);//第一列为序号int start = 0;if(flag){row.createCell((short) start)  .setCellValue(i+1);start++;}for (int j = 0; j < cols; j++) {columnName = dbColumnNames[j];value = PropertyUtils.getProperty(t, columnName);if(ChangnengUtil.isNull(value)){value="";}if(value instanceof Date){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");value = sdf.format(value);}row.createCell((short) start)  .setCellValue(value+"");start++;}}} catch (Exception e) {e.printStackTrace();}}
}

接下来再给出一个完整的例子:

使用示例:
@RequestMapping("/downSuccessFile")public ModelAndView downSuccessFile(HttpServletRequest request, HttpServletResponse response,HSSFWorkbook workbook,@RequestParam(value = "id", required = false) String id) {try {{ViewExcel viewExcel = new ViewExcel();Map<String, Object> model = new HashMap<String, Object>();// 表头String[] columnNames = { "巡查编号(本地系统)", "巡查人", "巡查时间", "巡查描述", "巡查地点东经", "巡查地点北纬" };model.put("columnNames", columnNames);// list集合对应的值String[] dbColumnNames = { "localSysNo", "patroName", "patrolDate", "title", "gisCoordinateX","gisCoordinateY"};model.put("dbColumnNames", dbColumnNames);// SysUsers user = (SysUsers)// SecurityContextHolder.getContext().getAuthentication() .getPrincipal();List<PatroDataImp> list = patroDataImpService.getAllSuccessPatroData(id);model.put("list", list);// excel文件的名称model.put("excelName", "巡查台账导入成功列表" + DateUtil.getDateTime("yyyyMMddHHmmss") + ".xls");// excel 文件的sheetmodel.put("sheetName", "sheet1");// 标记序号model.put("flag", true);viewExcel.buildExcelDocument(model, workbook, request, response);return new ModelAndView(new ViewExcel(), model);}} catch (Exception e) {e.printStackTrace();}return null;}

代码虽然比较多,但是比较简单,只要使用工具类就可以完成了

其实还有第三种方式,是利用framework,模板技术,这个我最近正在钻研,后续还会继续补充的

导出excel的两种方式相关推荐

  1. java导出excel的两种方式

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...

  2. html表格导出excel有几种方式

    html表格导出excel有几种方式 一. 前后端结合 利用 JavaScript 将表格内容转换为 Excel 文件格式,然后通过 Ajax 请求将文件数据发送给后台,再由后台返回该文件数据流,前端 ...

  3. 导出Word的两种方式

    导出Word有两种方式,分别是前端和后端 这两种方式在实际开发中根据实际需要会选择不同的方式 方式对比: 前端导出: 优点:简单,快捷,对于样式的设定也比较方便 缺陷:只可以导出本页展示的数据,导出的 ...

  4. excel下载两种方式(axios和window.open)

    excel下载两种方式 1 第一种 调用window.openmethods:{getDown() {window.open(baseUrl+ "/report/data_excel?cur ...

  5. java操作Excel有两种方式 方式1:jxl操作Excel jxl的API

    java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...

  6. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  7. flex前端+java后台实现Flex导出Excel的两种方法,

    Flex前端+Java后台,要将Flex界面中AdvancedDataGrid的数据导出成Excel文件.有2种方法: 1.直接在前台导出.      使用开源项目as3xls,下载个解决了中文乱码的 ...

  8. Java操作Excel的两种方式(详细)

    目录 POI操作 03版excel操作 07版操作 公式操作 poi读操作 EasyExcel操作 写操作 读操作 POI操作 poi操作excel分为03版和07版,03版的excel是有长度限制的 ...

  9. Qt导出数据到EXCEL的两种方式

    一.导出到csv格式,这种格式不用安装office QString DModel::exportDataToCSV(QString lx) {QString dtStr="d:/" ...

最新文章

  1. VTK:PolyData之ParametricSpline
  2. Express 入门之Router - worldtree_keeper的专栏 - CSDN博客
  3. 2005 打开 2010 项目经验总结
  4. git stash参数介绍
  5. UE4打包后如何调试
  6. CString Format
  7. 三年一个人使用虚幻引擎(UDK)开发的一个游戏心路
  8. python基础教程_python基础教程百度网盘
  9. 【时间序列】IJCAI 2021丨时间序列相关研究论文汇总
  10. Spirent Testcenter基本配置使用说明_1022
  11. 奇葩问题☞ npm install 报错 gyp ERR
  12. DC-DC同步升压芯片PW5100替代PC1961,原厂供应
  13. UVALive - 5713 Qin Shi Huang's National Road System
  14. HTTP的各种状态码你了解吗?
  15. html中的函数怎么显示变量,css - 原生变量及使用函数 var()
  16. matlab求解振动学问题,振动力学基础与MATLAB应用
  17. 控制工程实践(5)——线性控制系统的稳态误差(之二)
  18. Android Handler讲述很详细的一篇文章
  19. java 字符流读取方法_JAVA字符流方式读取文件 问题!
  20. 重贴:MFC类中获得其它类指针 (转)

热门文章

  1. 在线文件批量重命名工具
  2. vue中watch进行ajax,在vue中预加载watch用法
  3. 抖音小店:无货源店群玩法,2021年依旧能继续强势
  4. c# mysql数据库连接字符串_C#下各类数据库连接字符串
  5. Redis的数据功能
  6. Unity3D游戏开发之跑酷游戏项目详解
  7. android 录像 蓝牙耳机,Android - 从蓝牙耳机录制音频有时会从麦克风录制
  8. Ubuntu重启之后共享文件夹消失
  9. 智能车学习(二十三)——浅谈心得体会
  10. 用ajax提交表单给数据库,如何利用ajax提交form表单到数据库