常规的java导出excel表格最大的数据量是65535行。

package com.sf.module.timeManagement.biz;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;

import com.sf.module.basemanagement.domain.InfoSystem;
import com.sf.module.basemanagement.domain.OrgGroup;
import com.sf.module.dependwlm.domain.Version;
import com.sf.module.frameworkimpl.excel.ColumnDefine;
import com.sf.module.frameworkimpl.excel.TableDefine;
import com.sf.module.organization.domain.Department;
import com.sf.module.organization.domain.Employee;
import com.sf.module.qasbaseinfo.domain.QasDictionarys;
import com.sf.module.worksystem.domain.JobType;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Row;

/**
 * 单纯地数据导出,不做其他处理 2015-08-05
 * 
 * @author 591028
 * 
 */

public class ExcelExportSpBigData {
// Excel导出表格式定义
private TableDefine tableDefine;
// 创建工作本 TOS
public SXSSFWorkbook workbook = new SXSSFWorkbook(100);
public int num = 0;

public ExcelExportSpBigData(TableDefine tableDefine) {
this.tableDefine = tableDefine;
}

/**
* 导出数据到InputStream

* @param data
* @return
*/
public InputStream export(Collection<?> data) {
workbook = new SXSSFWorkbook(100);
workbook.setCompressTempFiles(true);
num = data.size();
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet(tableDefine
.getSheetName());
writeSheet(sheet, data);

return save(workbook);
}

/**
* 导出Excel

* @param sheet
* @param data
*/
private void writeSheet(SXSSFSheet sheet, Collection<?> data) {
try {
writeSheetHeader(sheet);
writeSheetContent(sheet, data);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* 生成表头

* @param sheet
*/
private void writeSheetHeader(SXSSFSheet sheet) {
Row row = sheet.createRow(0);
for (ColumnDefine column : tableDefine.getColumns()) {
short columnIndex = (short) column.getIndex();
Cell cell = row.createCell(columnIndex);
if (column.getWidth() > 0) {
sheet.setColumnWidth(columnIndex, (short) column.getWidth());
}
Object value = column.getTitle();
if (column.getExportCellEvent() != null) {
value = column.getExportCellEvent().onExportCell(column, 0,
cell, value);
// .onExportCell(column, 0,
// cell, value);
}
XSSFRichTextString richText = new XSSFRichTextString(
(value == null) ? "" : value.toString());
cell.setCellValue(richText);
}
}

/**
* 生成Excel内容

* @param sheet
* @param data
* @throws Exception
*/
private void writeSheetContent(SXSSFSheet sheet, Collection<?> data)
throws Exception {
if (data.size() > 0) {
Map<String, Field> fields = getClazzFields(data.iterator().next()
.getClass());
int rowIndex = 0;
for (Object obj : data) {
Row row = sheet.createRow(++rowIndex);
for (ColumnDefine column : tableDefine.getColumns()) {
short columnIndex = (short) column.getIndex();
Cell cell = row.createCell(columnIndex);
Object value = null;
if (column.getPropName().equals("systemCode")) {
if (null != fields.get("infoSystem")) {
value = (fields.get("infoSystem").get(obj));
InfoSystem aa = (InfoSystem) value;
value = aa != null ? aa.getSysCode() : "";
} else {
if (null != fields.get(column.getPropName())) {
value = fields.get(column.getPropName()).get(
obj);
} else {
value = "";
}
}

} else if (column.getPropName().equals("preDevMgr")) {
value = (fields.get("empMgr").get(obj));
Employee aa = (Employee) value;
value = aa != null ? aa.getEmpName() : "";
}

else if (column.getPropName().equals("versionId")) {
value = (fields.get("version").get(obj));
Version aa = (Version) value;
value = aa != null ? aa.getVersionNo() : "";
} else if (column.getPropName().equals("versionGroupCode")) {
value = (fields.get("orgGroup").get(obj));
OrgGroup aa = (OrgGroup) value;
value = aa != null ? aa.getGroupName() : "";
} else if (column.getPropName().equals("pubReSystemId")) {
value = fields.get("sysName").get(obj);
} else if (column.getPropName().equals("pubReVersionId")) {
value = fields.get("versionNo").get(obj);
} else if (column.getPropName().equals("departmentName")) {
value = (fields.get("department").get(obj));
Department aa = (Department) value;
value = aa != null ? aa.getDepartmentName() : "";
} else if (column.getPropName().equals("jobTypeName")) {
value = (fields.get("jobType").get(obj));
JobType aa = (JobType) value;
value = aa != null ? aa.getJobTypeName() : "";
} else if (column.getPropName().equals("childrenName")) {
value = (fields.get("jobType2").get(obj));
JobType aa = (JobType) value;
value = aa != null ? aa.getJobTypeName() : "";
} else if (column.getPropName().equals("workinghourType")) {
value = (fields.get("qasDictionarys").get(obj));
QasDictionarys aa = (QasDictionarys) value;
value = aa != null ? aa.getDictvalue() : "";
} else {
if (null != fields.get(column.getPropName())) {
value = fields.get(column.getPropName()).get(obj);
} else {
value = "";
}
}

if (column.getExportCellEvent() != null) {
value = column.getExportCellEvent().onExportCell(
column, rowIndex, cell, value);
}
if (value != null) {
HSSFRichTextString richText = new HSSFRichTextString(
(value == null) ? "" : value.toString());
// System.out.println(column.getIndex()+"="+value.toString());
if (isNumeric(value.toString())) {// column.getIndex()
// == 0 设置第一列为数字
// System.out.println(column.getIndex()+"***="+value.toString());
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
// //新增的四句话,设置CELL格式为文本格式
CellStyle cellStyle2 =   workbook
.createCellStyle();
DataFormat format =  workbook.createDataFormat();
cellStyle2.setDataFormat(format.getFormat("0.00"));
cell.setCellStyle(cellStyle2);

cell.setCellValue(Double.parseDouble(value
.toString()));

} else {
cell.setCellValue(richText);
}
} else {
cell.setCellValue("");
}

}

}

}

}

/**
* 获取对象的全部属性

* @param clazz
* @return
*/
private Map<String, Field> getClazzFields(Class<?> clazz) {
Map<String, Field> fieldMap = new HashMap<String, Field>();
for (Class<?> superClass = clazz; superClass != Object.class; superClass = superClass
.getSuperclass()) {
Field[] fields = superClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
fieldMap.put(field.getName(), field);
}
}
return fieldMap;
}

/**
* 保存Excel到InputStream

* @param workbook2
* @return
*/
private InputStream save(SXSSFWorkbook workbook) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
workbook.write(bos);
InputStream bis = new ByteArrayInputStream(bos.toByteArray());
return bis;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

public boolean isNumeric(String str) {
if ("".equals(str) || str == null)
return false;
// Pattern pattern = Pattern.compile("[0-9]*");
Pattern pattern = Pattern.compile("\\d+\\.\\d+");
return pattern.matcher(str).matches();
}

}

java导出大数据excel表格,导出数据相关推荐

  1. 关于大量数据Excel表格导出

    最新接触到一些数据管理相关项目,发现当需要导出数据库数据生成EXCEL表格时,会应为数据量过大导致导出表格的时候占用大量内存资源,而且速度很慢.就根据最近本人自己写的项目以及遇到的坑总结一下,也是方便 ...

  2. java 使用POI简单excel表格导出,通过浏览器直接下载

    pom.xl依赖 <!--POI Excel表格导出依赖--> <dependency><groupId>org.apache.poi</groupId> ...

  3. Java web批量导入excel表格的数据进入数据库的实现

    1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jarpoi- ...

  4. java性别分类汇总,excel表格 男女数据分开-Excel按性别进行分类汇总

    excel 分类汇总问题 按"职称"和"性别"进行分类,分... 这个用数据透视就好,你也可以有汇总的SUBTOTAL例:=SUBTOTAL(3,A1:A18) ...

  5. 通用Excel表格导出(Map类型数据导出为表格)

    背景 为提升代码开发效率,项目使用了通用查询(动态数据表.动态条件.动态列名等),各表查询通过同一个页面展现,前端通过获取路径上的表名调用同一个后端控制器--动态获取到查询条件.数据列名.不同表数据等 ...

  6. linux脚本的数据输出到excel,使用shell实现Excel表格导出功能 | 剑花烟雨江南

    在Web项目中,我们经常会遇到Excel表格导出的功能,对于一些数据实时性要求不高的.逻辑相对简单的导出,是否可用通过shell脚本的方式来进行导出,从而降低开发成本呢? 我们都知道,CSV格式可以用 ...

  7. 称重传感器测力怎么连接电脑采集数据并且表格导出

    称重传感器测力怎么连接电脑采集数据并且表格导出? 首先称重测力传感器原始的输出是弱点毫伏模拟量电压信号,正常是0~2毫伏左右,需要外置变送器或者显示器才能把信号转换成标准信号,电脑能采集的是数字量信号 ...

  8. 计算机高配置表格,数据大的excel表格对显卡有要求-求excel大量数据处理的电脑配置...

    EXCEL表格数据太大运行很卡,怎样处理 处理办法: [我的电脑],打开[资源管理器],点击[菜单栏]中]菜单下的[文件夹选项]. 在刚打开的[文件夹选项]中选择[文件类型]. 在[已注册的文件类型] ...

  9. Java代码实现Excel表格导出

    Java代码实现Excel表格导出 public static ResponseEntity<byte[]> employee2Excel(List<Employee> lis ...

  10. java删除数据库表格,《Java:数据库更新excel文件的数据同时删除数据库原来的数据》 excel表格如何删除相同数据库...

    Java:数据库更新excel文件的数据同时删除数据库原来的数据 重新写入blob的byte[],就可以覆盖了....... excel表格怎么检查有重复的数据库 方/步骤 打开需要编辑的Excel表 ...

最新文章

  1. 前端开发js运算符单竖杠“|”的用法和作用及js数据处理
  2. python使用笔记:pynput库控制键盘鼠标
  3. 写日历的一些总结(二)
  4. ipad流水布局及其旋转界面view间隔布局调整
  5. UBUNTU安装 Rabbitvsc可视化版本控制客户端软件
  6. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1
  7. arctime工程文件怎么打开_微信dat后缀的文件怎么打开
  8. window 平台上面解决不能动态php_mysqli.dll
  9. python plt 批量修改全局样式
  10. 使用Struts框架,实现用户登陆功能
  11. 重读浙大版《概率论与数理统计》
  12. h3csyslog_H3C-syslog配置命令
  13. 你知道怎么下载矢量图标吗——Iconfont
  14. distpicker
  15. Excel怎么区分中文英文
  16. 有实用简单的PS小技巧吗?下面几个小技巧你知道几个呢?
  17. 保镖(2019CSP-S模拟2C)(贪心,线段树)
  18. Doom3 CVarSystem分析
  19. 使用markman助力移动应用开发
  20. 手游自动化测试基础:方法及流程

热门文章

  1. Django框架(十七:session和cookie)
  2. ntoskrnl.exe占用大量cpu解决方法
  3. layui 动态绑定日期控件
  4. C语言关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次......)引发的思考---解题神器(三点一测法)
  5. 灵动ICPC冬令营基础-2
  6. 图像处理之灰度图像转换与二值化
  7. php js漂浮,基于javascript实现全屏漂浮广告_javascript技巧
  8. MySQL数据库输入中文报错,保姆级解决“Incorrect string value: ‘\\xE5\\xAE\\x9D\\xE9\\xA9\\xAC...‘编码问题
  9. 重试组件 Spring Retry
  10. 质数的后代 素数筛选法