您的位置:首页 > 大数据

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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: