大量数据的excel导出

时间:2022-09-20 15:11:18

对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了。它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样)。

大量数据的excel导出

private void writeToAlarmExcel(List<Map<String, Object>> list,String alarmTime, String subCenterName,HttpServletResponse response) throws Exception {
String excelName = subCenterName+"电气火灾预警统计表";
response.addHeader("Content-Disposition",
"attachment;filename=" + new String(excelName.getBytes("gb2312"), "ISO8859-1") + ".xlsx"); // 设置文件的名称
response.setContentType("application/msexcel;charset=gb2312");// 设置下载类型
OutputStream out = response.getOutputStream();
try {
// 声明一个工作簿
XSSFWorkbook wb = new XSSFWorkbook();
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(wb, 100);//内存中保留 1000 条数据,以免内存溢出,其余写入 硬盘
// 创建HSSFCellStyle单元格样式
CellStyle cellStyle = wb.createCellStyle();
// 设置水平对齐的样式为居中对齐;
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个表格
Sheet sheet = wb.createSheet("sheet1");
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
Row row0 = sheet.createRow((int) 0);
// 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
Cell cell = row0.createCell(0);
// 设置单元格内容
String newTime="";
if (StringUtils.isNotBlank(alarmTime)) {
if (alarmTime.trim().length() == 4) {//
newTime = alarmTime+"年";
} else if (alarmTime.trim().length() == 7) {// 2018-06
String[] aStrings = alarmTime.split("-");
newTime = Integer.parseInt(aStrings[0])+"年"+Integer.parseInt(aStrings[1])+"月";
} else if (alarmTime.trim().length() == 10) {// 2018-07-02
String[] aStrings = alarmTime.split("-");
newTime = Integer.parseInt(aStrings[0])+"年"+Integer.parseInt(aStrings[1])+"月"+Integer.parseInt(aStrings[2])+"日";
}
}else {
newTime = DateUtils.DateToString(new Date(), "yyyy年MM月");
}
//设置字体样式
Font beforefont = wb.createFont();
beforefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗提显示
beforefont.setFontHeightInPoints((short)18);
cellStyle.setFont(beforefont);
cell.setCellValue(excelName);
// 将样式应用于单元格
cell.setCellStyle(cellStyle);
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));
Cell cell2 = row0.createCell(8);
// 创建HSSFCellStyle单元格样式
CellStyle cellStyle3 = sxssfWorkbook.createCellStyle();
// 设置字体样式
Font afterfont = sxssfWorkbook.createFont();
afterfont.setFontHeightInPoints((short) 10);
cellStyle3.setFont(afterfont);
cell2.setCellValue("(统计时间:" + newTime + ")");
cell2.setCellStyle(cellStyle3);
Row row1 = sheet.createRow((int) 1);
//设置字体样式
CellStyle cellStyle2 = wb.createCellStyle();
Font font2 = wb.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short)11);
cellStyle2.setFont(font2);
row1.createCell(0).setCellValue("序号");
row1.getCell(0).setCellStyle(cellStyle2);
row1.createCell(1).setCellValue("单位");
row1.getCell(1).setCellStyle(cellStyle2);
row1.createCell(2).setCellValue("预警设施");
row1.getCell(2).setCellStyle(cellStyle2);
row1.createCell(3).setCellValue("预警地址");
row1.getCell(3).setCellStyle(cellStyle2);
row1.createCell(4).setCellValue("预警次数");
row1.getCell(4).setCellStyle(cellStyle2);
row1.createCell(5).setCellValue("首次预警时间");
row1.getCell(5).setCellStyle(cellStyle2);
row1.createCell(6).setCellValue("最后一次预警时间");
row1.getCell(6).setCellStyle(cellStyle2);
row1.createCell(7).setCellValue("预警状态");
row1.getCell(7).setCellStyle(cellStyle2);
int rowNum = 2;
int num = 1;
for (Map<String, Object> b : list) {
int cellNo = 0;
row1 = sheet.createRow(rowNum);
row1.createCell(cellNo++).setCellValue(num++);
row1.createCell(cellNo++).setCellValue(b.get("unitName") == null ? "" : b.get("unitName").toString());
row1.createCell(cellNo++)
.setCellValue(b.get("deviceName") == null ? "" : b.get("deviceName").toString());
row1.createCell(cellNo++)
.setCellValue(b.get("deviceAddress") == null ? "" : b.get("deviceAddress").toString());
row1.createCell(cellNo++).setCellValue(b.get("warnNum") == null ? "" : b.get("warnNum").toString());
row1.createCell(cellNo++)
.setCellValue(b.get("firstWarnTime") == null ? "" : b.get("firstWarnTime").toString());
row1.createCell(cellNo++)
.setCellValue(b.get("lastWarnTime") == null ? "" : b.get("lastWarnTime").toString());
row1.createCell(cellNo++)
.setCellValue(b.get("operationState") == null ? "" : b.get("operationState").toString());
rowNum++;
}
wb.write(out);
} catch (Exception e) {
e.printStackTrace();
throw new Exception("写入失败!");
}
}

大量数据的excel导出的更多相关文章

  1. 利用Aspose&period;Cells完成easyUI中DataGrid数据的Excel导出功能

    我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...

  2. 数据库数据用Excel导出的3种方法

    将数据库数据用Excel导出主要有3种方法:用Excel.Application接口.用OleDB.用HTML的Tabel标签 方法1——Excel.Application接口: 首先,需要要Exce ...

  3. Django&plus;python实现网页数据的excel导出

    一直都想做一个网页的excel导出功能,最近抽时间研究了下,使用urllib2与BeautifulSoup及xlwt模块实现 urllib2这个模块之前有用过,关于BeautifulSoup模块,可参 ...

  4. &period;NET使用Office Open XML导出超大数量数据到 Excel

    我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...

  5. &period;NET使用Office Open XML导出大量数据到 Excel

    我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...

  6. 1&period;ASP&period;NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

  7. 导出数据到Excel --使用ExcelReport有感

    先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...

  8. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  9. Dynamics CRM导出数据到Excel

    原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...

随机推荐

  1. 转债---Pregel&colon; A System for Large-Scale Graph Processing&lpar;译&rpar;

    转载:http://duanple.blog.163.com/blog/static/70971767201281610126277/   作者:Grzegorz Malewicz, Matthew ...

  2. Maven&plus;Spring&plus;Spring MVC&plus;MyBatis&plus;MySQL,搭建SSM框架环境

    项目建设完成之后的结构: 数据库的表结构如下: 环境建设:搭建Maven环境.Tomcat环境.需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备): 开始创建工程: 1.创建 ...

  3. Java开源框架推荐(全)

    Build Tool Tools which handle the buildcycle of an application. Apache Maven - Declarative build and ...

  4. 【转】华为Java编程军规,每季度代码验收标准

    引言: 这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值. 军规一:[避免在程序中使用魔鬼数字,必须用有意义的常量来标识.] 军规二:[明确方法的功能,一个方法仅完成一个功能.] 军规三: ...

  5. AVL树 &amp&semi; 重平衡概念

    AVL树是有平衡条件的二叉搜索树.这个平衡条件必须容易保持,而且需要保证树的深度是O(logN). AVL=BBST 作为二叉搜索树的最后一部分,我们来介绍最为经典的一种平衡二叉搜索树:AVL树.回顾 ...

  6. &&num;39&semi;webpack-dev-server&&num;39&semi; 不是内部或外部命令,也不是可运行的程序

    npm install  webpack-dev-server --save

  7. elasticsearch(四) 之 elasticsearch常用的一些集群命令

    目录 elasticsearch常用的一些集群命令 查看集群健康状态 查看集群的节点列表 查看所有的索引 删除索引 查询索引的某个文档内容 更新文档 删除文档 自动创建索引 定时删除索引 elasti ...

  8. ORACLE默认实例设置--linux

    数据库实例多了之后,每次export的时候,显示的ORACLE_SID总不是自己经常用的那个,要是能让默认的自定义就好了. 现在就解释一下在linux环境中如何定义: 1.su - oracle 2. ...

  9. 浏览器开启web通知。

    https://www.cnblogs.com/xcsn/p/7767092.html

  10. 十个书写Node&period;js REST API的最佳实践(上)

    收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...