java导出大数据excel表格,导出数据
2015-12-23 16:12
567 查看
常规的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();
}
}
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();
}
}
相关文章推荐
- [Err] 1205 - Lock wait timeout exceeded; try restarting transaction
- Your project path contains non-ASCII characters
- Page needs a session and none is available] with root cause
- Brainteaser:Bulb Switcher求平方根的思考
- 大数据量的分表方法
- http://blog.csdn.net/column/details/android-advanced-dev.html
- AutoLayout:忘掉Frame,拥抱Constraint(I)
- 云平台、云计算详解
- ERROR [block nbd5: Receive control failed (result -32)]
- debain install scim
- 改善用户体验,用图片的自身变化以及进度通知摆脱传统的进度条,okhttp,Canvas,Paint实现
- 改善用户体验,用图片的自身变化以及进度通知摆脱传统的进度条,okhttp,Canvas,Paint实现
- SVN报错authorization failed: Could not authenticate to server: rejected Basic challenge
- IBM的云计算产品和解决方案一览
- Java代码中调用shell脚本和python脚本并获得输出结果(分为小数据量和大数据量)
- Leetcode: Paint House II
- http://blog.csdn.net/tangaowen/article/details/8551762
- Chain Codes and Your Brain 链码和大脑
- Introduction to Chain Codes 链码导论
- Freeman Chain Code链码