• 该功能涉及到两个知识点,一是制作excel相关插件的使用,二是导出文件,spring-mvc该如何配置
  • 先说excel插件的使用,这次使用的是org.apache.poi包,版本是3.9,下面粘完整能运行的代码
  • maven依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency>
  • 插件的实体类,也可以理解为参数,这里采用了build设计模式,好处是初始化了一些默认值,使用的时候代码写的方便。针对表格导出,我觉得三个参数足够了,标题、表头以及数据,所以,这三个参数构造方法我设计的必传,其它使用默认参数
package com.util;import java.util.List;public class ExcelParam {String name;int width;String font;String[] headers;/*** 导出数据的样式* 1:String left;* 2:String center* 3:String right* 4 int  right* 5:float ###,###.## right* 6:number: #.00% 百分比 right*/int[] ds_format;/*** 每列表格的宽度,默认为256 * 14*/int[] widths;List<String[]> data;private ExcelParam() {}//使用Builder模式,设置默认参数和必填参数public static class Builder {String name;int width = 256 * 14;String font = "微软雅黑";String[] headers;int[] ds_format;int[] widths;List<String[]> data;public Builder(String name) {this.name = name;}public Builder font(String font) {this.font = font;return this;}public Builder width(int width) {this.width = width;return this;}public Builder headers(String[] headers) {this.headers = headers;return this;}public Builder ds_format(int[] ds_format) {this.ds_format = ds_format;return this;}public Builder widths(int[] widths) {this.widths = widths;return this;}public Builder data(List<String[]> data) {this.data = data;return this;}public ExcelParam build() {ExcelParam excelParam = new ExcelParam();excelParam.name = this.name;excelParam.data = this.data;excelParam.widths = this.widths;excelParam.ds_format = this.ds_format;excelParam.headers = this.headers;excelParam.font = this.font;excelParam.width = this.width;return excelParam;}}
}
  • 插件本身
package com.ucredit.util;import org.apache.poi.hssf.usermodel.*;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;public class ExcelUtil {private ExcelUtil() {}public static void export(ExcelParam excelParam, HttpServletResponse response) throws IOException {if (excelParam.widths == null) {excelParam.widths = new int[excelParam.headers.length];for (int i = 0; i < excelParam.headers.length; i++) {excelParam.widths[i] = excelParam.width;}}if (excelParam.ds_format == null) {excelParam.ds_format = new int[excelParam.headers.length];for (int i = 0; i < excelParam.headers.length; i++) {excelParam.ds_format[i] = 1;}}//创建一个工作薄HSSFWorkbook wb = new HSSFWorkbook();//创建一个sheetHSSFSheet sheet = wb.createSheet("excel");int rowCount = 0;if (excelParam.headers != null) {HSSFRow row = sheet.createRow(rowCount);//表头样式HSSFCellStyle style = wb.createCellStyle();HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontHeightInPoints((short) 11);style.setFont(font);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);for (int i = 0; i < excelParam.headers.length; i++) {sheet.setColumnWidth(i, excelParam.widths[i]);HSSFCell cell = row.createCell(i);cell.setCellValue(excelParam.headers[i]);cell.setCellStyle(style);}rowCount++;}HSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//表格主体  解析listfor (int i = 0; i < excelParam.data.size(); i++) {  //行数HSSFRow row = sheet.createRow(rowCount);for (int j = 0; j < excelParam.headers.length; j++) {  //列数HSSFCell cell = row.createCell(j);cell.setCellValue(excelParam.data.get(i)[j]);cell.setCellStyle(style);}rowCount++;}//设置文件名String fileName = excelParam.name + ".xls";response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.setHeader("Pragma", "No-cache");OutputStream outputStream = response.getOutputStream();wb.write(outputStream);outputStream.flush();outputStream.close();}
}
  • 其实从这个方法就能看出,文件最后导出,实际上是往response中的outputStream中写入文件,之后的工作是由浏览器来完成的
  • controller层写法
    @RequestMapping(value = "download")public void download(@RequestParam String username,@RequestParam String operation_module,@RequestParam String operation_type,@RequestParam String start_time,@RequestParam String end_time,HttpServletResponse response) throws Exception {List<OperationLogEntity> list = operationLogDao.get(username, operation_module, operation_type, start_time, end_time);String[] heads = {"序号", "账号", "姓名", "操作类型", "操作模块", "处理员工号码", "处理结果", "登录IP", "时间", "所在城市"};List<String[]> data = new LinkedList<>();for (int i = 0; i < list.size(); i++) {OperationLogEntity entity = list.get(i);String[] temp = new String[10];temp[0] = String.valueOf(i + 1);temp[1] = entity.getUsername();temp[2] = entity.getName();temp[3] = entity.getOperation_type();temp[4] = entity.getOperation_module();temp[5] = entity.getProcess_number();temp[6] = entity.getProcess_result();temp[7] = entity.getIp();temp[8] = DateUtils.getDateBeforeOrAfterStrCN(entity.getOperation_time(), 0);temp[9] = entity.getCity();data.add(temp);}ExcelParam param = new ExcelParam.Builder("操作日志").headers(heads).data(data).build();ExcelUtil.export(param, response);}
  • 实际使用
//这样写很简洁
ExcelParam param = new ExcelParam.Builder("操作日志").headers(heads).data(data).build();

web项目导出excel表格相关推荐

  1. win7 64位系统web项目导出Excel问题汇总

    最近在web项目中做了一个导出Excel功能.在导出的时候报错:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败. 一 ...

  2. vue项目导出Excel表格

    我们开发的时候可能需要导出表格,来实现客户的需求,接下来就从vue项目中介绍导出excal表格的方式. 以这个项目为实例来分析,导出就要选择数据,我这里做了全选数据导出和单选数据导出,先开一下如何处理 ...

  3. Java web项目利用POI导出EXCEL表格

    SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell: ...

  4. springboot项目导出excel 合并单元格表格

    springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...

  5. java 导入导出excel表格

    java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...

  6. vue合并表格excel导出_Vue实现导出excel表格功能

    引言: 最近使用vue在做一个后台系统,技术栈 vue + iView ,在页面中生成表格后, iView可以实现表格的导出,不过只能导出csv格式的,并不适合项目需求. 如果想要导出Excel 在s ...

  7. java实现这个无表头空表格,《java程序导出excel表格是空白的没有数据?》 java怎么导入数据库...

    java程序导出excel表格是空白的没有数据? 看一下是否可以链接上数据库,或者查看一下链接的数据库是否有数据 java从数据库中导出excel poi 建议你使用pageoffice. java ...

  8. oracle数据库html导出表格,html数据库导出excel表格数据-关于把数据库数据以表格形式导出...

    关于把数据库数据以表格形式导出 库中的数据导出到excel,以oracle为例: 最简单的方法---用工plsql dev 执行File =>newReport Window .在sql标签中写 ...

  9. node-xlsx - 简单几行代码处理导入、导出 excel 表格数据,免费开源的 javascript 工具库

    最近开发的项目上需要把数据导出为 xlsx 文档,找了一圈,发现 node-xlsx 简单好用,分享给各位. 关于 node-xlsx 在 web 开发中,管理后台生成 excel 报表并且下载,一个 ...

  10. 使用NPOI将数据库里信息导出Excel表格并提示用户下载

    使用NPOI进行导出Excel表格大家基本都会,我在网上却很少找到导出Excel表格并提示下载的 简单的代码如下 1 //mvc项目可以传多个id以逗号相隔的字符串2 public ActionRes ...

最新文章

  1. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏
  2. ERP成分简介--听觉感觉反应
  3. centos sqldeveloper 连接mysql,Oracle SQL Developer 连接 Mysql 等数据库
  4. UA STAT687 线性模型II 最小二乘理论3 广义最小二乘
  5. Vue.js 技术揭秘学习 (2) Vue 实例挂载的实现
  6. 旅游景点人物进出系统[OC项目]
  7. 解决Tomcat下源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
  8. Zoe Liu:被Chrome Media团队的专注精神感染
  9. [css] 一个项目中有很多无用的css代码,怎么找到并清除这些无用的代码?
  10. hibernate 一对多_为什么很多人不愿意用hibernate了?
  11. java类型转换 float类型转换_Java类型转换 – float(和long)到int
  12. 单目视觉里程计的尺度问题的疑问?
  13. 【bzoj2118】 墨墨的等式
  14. Springboot系列之RestApi中获取枚举类属性的几种方式
  15. android 手机存储位置设置,如何将红米手机外置SD卡设定为默认存储
  16. 嵌入式Linux入门-手把手教你初始化SDRAM(附代码)
  17. java tessdata训练_Tesseract训练中文字体识别
  18. 2_竞赛无人机基础飞行控制函数——零基础学习竞赛无人机搭积木式编程
  19. python 读写csv文件(创建,追加,覆盖)
  20. Airbnb短租数据分析报告

热门文章

  1. Citrix发布支持Framehawk技术的HDX协议,用户体验优势进一步扩大
  2. 《Oracle 11g数据库基础教程(第2版)》读者勘误
  3. 军用设备环境试验GJB150A-2009检测报告机构
  4. Python实现四个经典小游戏合集
  5. android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地...
  6. 【软考系统架构设计师】2013年下系统架构师案例分析历年真题
  7. 图片和Base64编码相互转换
  8. 吴恩达机器学习课程笔记
  9. 目前使用的python版本_Python版本到底有多少种?
  10. C语言爱心代码,C语言爱心代码合集(附源码)