比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。
Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有

用于操作Excel格式文件的HSSF

和用于操作Word的HWPF,

目前用于操作Excel的HSSF比较成熟

一、前端

1、

<el-button type="primary" size="medium" @click="exportExcell">数据导出</el-button>

2、

//数据导出
exportExcel:function () {
let self = this;
self.table.pageData.pollutionIds=[];
self.table.pageData.caseSourceIds=[];
this.tagBoxList.forEach(function (item) {
if(item.type === 0 && item.value){
self.table.pageData.pollutionIds.push(item.value);
}
});
if (self.datetimeRange) {
self.table.pageData.startDate = this.datetimeRange[0];
self.table.pageData.endDate = this.datetimeRange[1];
} else {
self.table.pageData.startDate='' ;
self.table.pageData.endDate='' ;
}
// 按钮事件直接访问接口地址,后面url传参数
window.location.href= appPath+"/service/xfxxx/exportExcel?ticketId="+self.ticketId +
"&dataRange="+self.table.pageData.dataRange+"
}

二、java代码

控制器(业务管理层):

   @ResponseBody
@RequestMapping(value = "/exportExcel")
public void exportExcel(HttpServletResponse response, XfxxxParam param, XfUser user) {
JsonResult json = JsonResult.getSuccessResult();
try {
String fileName = "导出数据" + XfDateUtil.DateToString(CacheHelper.getTime(), XfDateUtil.YYYY_MM_DD) + ".xls";
HSSFWorkbook wb = xxxService.exportExcel(param, user);
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1") +".xls");
ExportExcel.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
logger.error("导出数据报表时异常", e);
json.setException(e);
}
}

业务实施层:

@Override
public HSSFWorkbook exportxxx(XfxxxParam param, XfUser user) {
calculatexxxCondition(param);
List<XfxxxModel> xxxModelList = null;
xxxModelList = baseMapper.listxxx(param); // mapper接口mybatis交互数据库返回满足条件的数据 String[] title = {"案件编号", "案件来源", "污染类型", "问题属地", "投诉对象", "问题描述", "举报时间", "要求结办时间", "状态"}; // excel的表头
String sheetName = "案件数据";
String[][] content = new String[xxxModelList.size()][];
for (int i = 0; i < xxxModelList.size(); i++) {
content[i] = new String[title.length];
XfxxxModel xxxModel = xxxModelList.get(i);
content[i][0] = xxxModel.getCaseCode();
content[i][1] = xxxModel.getCaseSource();
content[i][2] = xxxModel.getPollutionCtg();
content[i][3] = xxxModel.getCantonName();
content[i][4] = xxxModel.getInstName();
content[i][5] = xxxModel.getxxxReason();
if (Objects.nonNull(xxxModel.getTime())) {
// content[i][6] = XfDateUtil.DateToString(xxxModel.getTime(), XfDateUtil.YYYY_MM_DD_HHMMSS);
content[i][6] = XfDateUtil.DateToString(xxxModel.getTime(), XfDateUtil.YYYY_MM_DD);//带上时分秒excel解析月份会有问题(出现月份大于12的情况)
}
if (Objects.nonNull(xxxModel.getInputEndDate())) {
content[i][7] = XfDateUtil.DateToString(xxxModel.getInputEndDate(), XfDateUtil.YYYY_MM_DD);
}
content[i][8] = xxxModel.getBusiName();
} //创建HSSFWorkbook
HSSFWorkbook wb = ExportExcel.getHSSFWorkbook(sheetName, title, content, null);
return wb;
}

封装的导出excel的工具类;

package com.xxx.common.util;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException; public class ExportExcel { /**
* 导出Excel
*
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @param wb HSSFWorkbook对象
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) { // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if (wb == null) {
wb = new HSSFWorkbook();
} // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0); // 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 //声明列对象
HSSFCell cell = null; //创建标题
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
} //创建内容
for (int i = 0; i < values.length; i++) {
row = sheet.createRow(i + 1);
for (int j = 0; j < values[i].length; j++) {
//将内容按顺序赋给对应的列对象
row.createCell(j).setCellValue(values[i][j]);
}
}
return wb;
} public static void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
} }

数据导出生成Excel附件使用POI的HSSFWorkbook对象的更多相关文章

  1. 数据导出生成word附件使用POI的XWPFTemplate对象

    比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...

  2. Json数据导出生成Excel

    最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点.根据这次的经验,写了个导出的小样例. 总体思路就是json数据的key,value跟Ex ...

  3. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  4. 学习笔记 DataGridView数据导出为Excel

    DataGridView数据导出为Excel   怎样把WinForm下的“DGV”里的绑定数据库后的数据导出到Excel中. 比如:在窗体里有个一“DGV”,DataGridView1,绑定了数据源 ...

  5. 使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!

    一.需求 我们会遇到开发任务: 经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel. 小王:好的,经理.(内心一脸懵逼) 二.前期准备 首先我们 ...

  6. Java利用Apache POI将数据库数据导出为excel

    将数据库中的数据导出为excel文件,供其他人查看 public class POITest { public static void main(String[] args) { POITest te ...

  7. 大批量数据导出到Excel的实现

    在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现. OLEDB   使用OLEDB可以很方便导出Excel,思路很简单,处理时将Exc ...

  8. asp.net将数据导出到excel

    本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...

  9. C#大量数据导出到Excel(转)

    工作过程中经常会用到将数据导出到Excel中,一般情况下需要导出的数据都是几百几千条或者上万条,这都没有什么问题,但有时候会遇到特殊的需求,客户要求把几十万条甚至上百万条的数据导出到Excel中,这就 ...

随机推荐

  1. 洛谷P2504题解

    题目 瓶颈生成树的裸题.可以查看这个来获取更多信息. 他问的是能够在所有树上自由穿梭的猴子个数,那我只需要算出这张图上最小生成树中权值最大的边,和每个猴子的最大跳跃长度进行比较即可. 因为我用的是 \ ...

  2. Java基础——JavaDoc生成文档

    JavaDoc生成文档  package Top1; ​ /**  * @author lwt  * @version 1.0  * @since 1.8  *  */ ​ public class ...

  3. 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载

    笔记作者:来自于阿里P8级大神: Mark 笔记特点:条理清晰,理论+实战+源码,含图像化表示更加易懂. 内容概要:Android 相关,性能优化,Java 相关,Kotlin 相关,网络相关,插件化 ...

  4. 我,35岁Android开发,高龄入职鹅厂,试用期未过被劝退......今年实惨

    今天,笔者盘点.综合分享一位腾讯员工的"心声".这份心声中干货还是不少的,主要关于腾讯的一些职场生活--希望这些"干货"能对你有所帮助. 什么部门?给补偿吗? ...

  5. Java compareTo() 方法(转载)

    Java compareTo() 方法 compareTo() 方法用于两种方式的比较: 字符串与对象进行比较. 按字典顺序比较两个字符串. 语法: int compareTo(Object o)// ...

  6. 关于协议栈XDATA,内存溢出的小结

    [第二部分的内容仅供参考,自己不是十分确定] ************************************************************** ************** ...

  7. 基于ssm的电影售票选座管理系统基于Java的电影网站的网页设计与制作源码

    注意:此项目只截图部分功能,可评论区咨询查看项目全部功能演示! 1.开发环境 开发语言: 后台框架:SSM(Spring+SpringMVC+Mybatis) 前端技术:HTML+CSS+JavaSc ...

  8. 一张图说明 iaas paas saas的区别

    图片来源:https://www.bilibili.com/video/BV1QJ411S7c4  P2 云服务的三种模式 1laaS(基础设施即服务) laas(Infrastructure as ...

  9. 【笔记】初探KNN算法(1)

    KNN算法(1) 全称是K Nearest Neighbors k近邻算法: 思想简单 需要的数学知识很少 效果不错 可以解释机器学习算法使用过程中的很多细节问题 更加完整的刻画机器学习应用的流程 其 ...

  10. Docker的使用笔记

    介绍Docker Docker为了解决依赖的兼容问题的,采用了两个手段: 将应用的Libs(函数库).Deps(依赖).配置与应用一起打包 将每个应用放到一个隔离容器去运行,避免互相干扰 Docker ...