java 操作Excel文件一些感悟(内存溢出)
来源:互联网 发布:淘宝被冻结了怎么注销 编辑:程序博客网 时间:2024/05/17 03:37
java中操作报表很正常:所以Excel很常用到,我介绍几个关于封装类:
import java.util.Collection;import java.util.HashMap;import java.util.HashSet;import java.util.List;public class CommonExcelData implements java.io.Serializable, IsDataBean{private String reportName; //报表的大标题private HashMap otherDatas; //其他数据private HashMap queryParams; //查询条件private HashMap queryParamsn; //查询条件2private HashMap totalInfos; //汇总信息private String[][] columnTitles; //列标题private String[][] columnTitlesEn; //列标题private boolean isWarrantReport;private Collection datas; //正文数据private HashSet orderNum;private Long fileId;private ReportCollection allCollection;private String reportImage1; //图片路径private String reportImage2; //图片路径private HashMap NewImage; //NEWprivate HashMap TimImage; //TIMprivate HashMap EqtImage; //EQTprivate HashMap CnlImage; //CNLprivate HashMap RteImage; //RTEprivate HashMap AllImage; //所有报文private HashMap ShareImage; //所占报文private String reportNameImage; //报表提示信息 public HashMap getQueryParamsn() {return queryParamsn;}public void setQueryParamsn(HashMap queryParamsn) {this.queryParamsn = queryParamsn;}// private List<ReportDataByDept> listDataByDept;public ReportCollection getAllCollection() {return allCollection;}public void setAllCollection(ReportCollection allCollection) {this.allCollection = allCollection;}public String getReportName() {return reportName;}public void setReportName(String reportName) {this.reportName = reportName;}public HashMap getTotalInfos() {return totalInfos;}public void setTotalInfos(HashMap totalInfos) {this.totalInfos = totalInfos;}public Collection getDatas() {return datas;}public void setDatas(Collection datas) {this.datas = datas;}public String[][] getColumnTitles() {return columnTitles;}public void setColumnTitles(String[][] columnTitles) {this.columnTitles = columnTitles;}public HashMap getOtherDatas() {return otherDatas;}public void setOtherDatas(HashMap otherDatas) {this.otherDatas = otherDatas;}public HashMap getQueryParams() {return queryParams;}public void setQueryParams(HashMap queryParams) {this.queryParams = queryParams;}public HashSet getOrderNum() {return orderNum;}public void setOrderNum(HashSet orderNum) {this.orderNum = orderNum;}public Long getFileId() {return fileId;}public void setFileId(Long fileId) {this.fileId = fileId;}//public List<ReportDataByDept> getListDataByDept() {//return listDataByDept;//}//public void setListDataByDept(List<ReportDataByDept> listDataByDept) {//this.listDataByDept = listDataByDept;//}public String[][] getColumnTitlesEn() {return columnTitlesEn;}public void setColumnTitlesEn(String[][] columnTitlesEn) {this.columnTitlesEn = columnTitlesEn;}public boolean isWarrantReport() {return isWarrantReport;}public void setWarrantReport(boolean isWarrantReport) {this.isWarrantReport = isWarrantReport;}public String getReportImage1() {return reportImage1;}public void setReportImage1(String reportImage1) {this.reportImage1 = reportImage1;}public String getReportImage2() {return reportImage2;}public void setReportImage2(String reportImage2) {this.reportImage2 = reportImage2;}public HashMap getNewImage() {return NewImage;}public void setNewImage(HashMap newImage) {NewImage = newImage;}public HashMap getTimImage() {return TimImage;}public void setTimImage(HashMap timImage) {TimImage = timImage;}public HashMap getEqtImage() {return EqtImage;}public void setEqtImage(HashMap eqtImage) {EqtImage = eqtImage;}public HashMap getCnlImage() {return CnlImage;}public void setCnlImage(HashMap cnlImage) {CnlImage = cnlImage;}public HashMap getRteImage() {return RteImage;}public void setRteImage(HashMap rteImage) {RteImage = rteImage;}public HashMap getAllImage() {return AllImage;}public void setAllImage(HashMap allImage) {AllImage = allImage;}public HashMap getShareImage() {return ShareImage;}public void setShareImage(HashMap shareImage) {ShareImage = shareImage;}public String getReportNameImage() {return reportNameImage;}public void setReportNameImage(String reportNameImage) {this.reportNameImage = reportNameImage;}}
import java.io.File;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import jxl.Workbook;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableImage;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;public class ReportGenerate {private String fileName;private CommonExcelData commonData;private DecimalFormat df = new DecimalFormat("0.00"); public ReportGenerate(String fileName, CommonExcelData commonData) {this.fileName = fileName;this.commonData = commonData;} public void generateReport()throws Exception { File file = new File(fileName); WritableWorkbook workbook = null; try { workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("sheet0", 0); //大标题的格式 WritableFont titleNameFont = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat titleNameFormat = new WritableCellFormat(titleNameFont); titleNameFormat.setAlignment(jxl.format.Alignment.CENTRE); titleNameFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); //列标题的格式 WritableFont columnNameFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat columnNameFormat = new WritableCellFormat(columnNameFont); columnNameFormat.setAlignment(jxl.format.Alignment.CENTRE); columnNameFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); //正文数据格式 WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat detFormat = new WritableCellFormat(detFont); detFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); Label l = null; //将大标题写入报表文件 l = new Label(0, 0, commonData.getReportName(), titleNameFormat); sheet.addCell(l); sheet.mergeCells(0, 0, 5, 0); //大标题跨5列显示 //将查询条件写入报表文件 int column = 0; //列坐标 int row = 2; //行坐标 Map queryParams = commonData.getQueryParams(); if(queryParams != null) { int num = 0; Set keys = queryParams.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { num++; String key = (String) itor.next(); l = new Label(column, row, key, columnNameFormat); sheet.addCell(l); column++; Object value = queryParams.get(key); String content = getContent(value); l = new Label(column, row, content, detFormat); sheet.addCell(l); column++; if(num % 2 == 1) { //增加空格 l = new Label(column, row, " ", columnNameFormat); sheet.addCell(l); column++; } else { //换行 row++; column = 0; } } row+=2; } //将其他数据写入报表文件 column = 0; Map otherDatas = commonData.getOtherDatas(); if(otherDatas != null) { int num = 0; Set keys = otherDatas.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { num++; String key = (String) itor.next(); l = new Label(column, row, key, columnNameFormat); sheet.addCell(l); column++; Object value = otherDatas.get(key); String content = getContent(value); l = new Label(column, row, content, detFormat); sheet.addCell(l); column++; if(num % 2 == 1) { //增加空格 l = new Label(column, row, " ", columnNameFormat); sheet.addCell(l); column++; } else { //换行 row++; column = 0; } } row+=2; } column = 0; //将列标题写入报表文件 String[][] titles = commonData.getColumnTitles(); for (int i = 0; i < titles.length; i++) { l = new Label(column++, row, titles[i][1], columnNameFormat); sheet.addCell(l); } row++; if(commonData.isWarrantReport()){ column = 0; //将列英文标题写入报表文件 String[][] titles1 = commonData.getColumnTitlesEn(); for (int i = 0; i < titles.length; i++) { l = new Label(column++, row, titles1[i][1], columnNameFormat); sheet.addCell(l); } row++; } //写正文数据 Collection datas = commonData.getDatas(); if(datas != null) { Iterator iter = datas.iterator(); while(iter.hasNext()) { column = 0; Object obj = iter.next(); Class thisClass = obj.getClass(); for(int j = 0; j < titles.length; j++) { String fieldName = titles[j][0]; Field field = thisClass.getDeclaredField(fieldName); Class fieldType = field.getType(); //取属性数据类型/* Field[] fields = thisClass.getDeclaredFields(); for(int j = 0; j < fields.length; j++) { String fieldName = fields[j].getName(); //取属性名 Class fieldType = fields[j].getType(); //取属性数据类型*/ String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); if(fieldType.getName().equals("java.lang.Boolean")) { //布尔数据类型的属性获得方法以is开头 getMethodName = "is" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } Method getMethod = thisClass.getMethod(getMethodName, new Class[]{}); Object fieldValue = getMethod.invoke(obj, new Object[]{}); String content = getContent(fieldValue); l = new Label(column++, row, content, detFormat); sheet.addCell(l); } row++; } } //将汇总信息写入报表文件 HashMap totalInfos = commonData.getTotalInfos(); //Object totalInfos = commonData.getTotalInfos(); if(totalInfos != null) { Class thisClass = totalInfos.getClass(); l = new Label(0, row, "合计:", columnNameFormat); sheet.addCell(l); Set keys = totalInfos.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } }// int index = 0;// for(int i = 0; i < titles.length; i++) {// if(key.equals(titles[i][0].trim())) {// index = i;// break;// }// } Object value = totalInfos.get(key); String content = getContent(value); l = new Label(index, row, content, detFormat); sheet.addCell(l); }/* Field[] fields = thisClass.getDeclaredFields(); column = 1; for(int j = 1; j < fields.length; j++) { String fieldName = fields[j].getName(); //取属性名 Class fieldType = fields[j].getType(); //取属性数据类型 String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); if(fieldType.getName().equals("java.lang.Boolean")) { //布尔数据类型的属性获得方法以is开头 getMethodName = "is" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } Method getMethod = thisClass.getMethod(getMethodName, new Class[]{}); Object fieldValue = getMethod.invoke(totalInfos, new Object[]{}); String content = getContent(fieldValue); l = new Label(column++, row, content, detFormat); sheet.addCell(l); } */ } //将图片信息写入报表文件// String reportImage = commonData.getReportImage();// sheet.addCell(new Label(0, 3, "展示图片 jxl只支持png格式的", columnNameFormat)); // 展示图片标题// sheet.mergeCells(0, 3, 3, 3); // 合并图片标题单元格//// File fileImage = new File(reportImage); // 获得图片// WritableImage image = new WritableImage(0, 4, 3, 3, fileImage); // 设置图片显示位置// // 4,4代表图片的高和宽占4个单元格//// sheet.addImage(image); // 加载图片 workbook.write(); } catch (Exception e) { e.printStackTrace(); } finally { if(workbook!=null){ try {workbook.close();} catch (IOException e) {e.printStackTrace();} } } }public void generateReportImage()throws Exception { File file = new File(fileName); WritableWorkbook workbook = null; try { workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("sheet0", 0); //大标题的格式 WritableFont titleNameFont = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat titleNameFormat = new WritableCellFormat(titleNameFont); titleNameFormat.setAlignment(jxl.format.Alignment.CENTRE); titleNameFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); //列标题的格式 WritableFont columnNameFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat columnNameFormat = new WritableCellFormat(columnNameFont); columnNameFormat.setAlignment(jxl.format.Alignment.CENTRE); columnNameFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); //正文数据格式 WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat detFormat = new WritableCellFormat(detFont); detFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); Label l = null; //将大标题写入报表文件 l = new Label(0, 0, commonData.getReportName(), titleNameFormat); sheet.addCell(l); sheet.mergeCells(0, 0, 5, 0); //大标题跨5列显示 sheet.addCell(new Label(0, 1, commonData.getReportNameImage(), columnNameFormat)); sheet.mergeCells(0, 1, 5, 0); //将查询条件写入报表文件 int column = 0; //列坐标 int row = 2; //行坐标 Map queryParams = commonData.getQueryParams(); if(queryParams != null) { int num = 0; Set keys = queryParams.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { num++; String key = (String) itor.next(); l = new Label(column, row, key, columnNameFormat); sheet.addCell(l); column++; Object value = queryParams.get(key); String content = getContent(value); l = new Label(column, row, content, detFormat); sheet.addCell(l); column++; if(num % 2 == 1) { //增加空格 l = new Label(column, row, " ", columnNameFormat); sheet.addCell(l); column++; } else { //换行 row++; column = 0; } } row+=2; } //将查询条件2写入报表文件 int columnn = 0; //列坐标 int rown = 3; //行坐标 Map queryParamsn = commonData.getQueryParamsn(); if(queryParams != null) { int num = 0; Set keys = queryParamsn.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { num++; String key = (String) itor.next(); l = new Label(columnn, rown, key, columnNameFormat); sheet.addCell(l); columnn++; Object value2 = queryParamsn.get(key); String content = getContent(value2); l = new Label(columnn, rown, content, detFormat); sheet.addCell(l); columnn++; if(num % 2 == 1) { //增加空格 l = new Label(columnn, rown, " ", columnNameFormat); sheet.addCell(l); columnn++; } else { //换行 row++; columnn = 0; } } rown+=2; } //将其他数据写入报表文件 column = 0; Map otherDatas = commonData.getOtherDatas(); if(otherDatas != null) { int num = 0; Set keys = otherDatas.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { num++; String key = (String) itor.next(); l = new Label(column, row, key, columnNameFormat); sheet.addCell(l); column++; Object value = otherDatas.get(key); String content = getContent(value); l = new Label(column, row, content, detFormat); sheet.addCell(l); column++; if(num % 2 == 1) { //增加空格 l = new Label(column, row, " ", columnNameFormat); sheet.addCell(l); column++; } else { //换行 row++; column = 0; } } row+=2; } column = 0; //将列标题写入报表文件 String[][] titles = commonData.getColumnTitles(); for (int i = 0; i < titles.length; i++) { l = new Label(column++, 4, titles[i][1], columnNameFormat); sheet.addCell(l); } row++; if(commonData.isWarrantReport()){ column = 0; //将列英文标题写入报表文件 String[][] titles1 = commonData.getColumnTitlesEn(); for (int i = 0; i < titles.length; i++) { l = new Label(column++, row, titles1[i][1], columnNameFormat); sheet.addCell(l); } row++; } //写正文数据 Collection datas = commonData.getDatas(); if(datas != null) { Iterator iter = datas.iterator(); while(iter.hasNext()) { column = 0; Object obj = iter.next(); Class thisClass = obj.getClass(); for(int j = 0; j < titles.length; j++) { String fieldName = titles[j][0]; Field field = thisClass.getDeclaredField(fieldName); Class fieldType = field.getType(); //取属性数据类型/* Field[] fields = thisClass.getDeclaredFields(); for(int j = 0; j < fields.length; j++) { String fieldName = fields[j].getName(); //取属性名 Class fieldType = fields[j].getType(); //取属性数据类型*/ String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); if(fieldType.getName().equals("java.lang.Boolean")) { //布尔数据类型的属性获得方法以is开头 getMethodName = "is" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } Method getMethod = thisClass.getMethod(getMethodName, new Class[]{}); Object fieldValue = getMethod.invoke(obj, new Object[]{}); String content = getContent(fieldValue); l = new Label(column++, row, content, detFormat); sheet.addCell(l); } row++; } } //将NEW报文信息写入报表文件 HashMap NewImage = commonData.getNewImage(); //Object totalInfos = commonData.getTotalInfos(); if(NewImage != null) { Class thisClass = NewImage.getClass(); l = new Label(0, 5, "NEW:", columnNameFormat); sheet.addCell(l); Set keys = NewImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = NewImage.get(key); String content = getContent(value); l = new Label(index, 5, content, detFormat); sheet.addCell(l); } } //将TIM报文信息写入报表文件 HashMap TimImage = commonData.getTimImage(); //Object totalInfos = commonData.getTotalInfos(); if(TimImage != null) { Class thisClass = TimImage.getClass(); l = new Label(0, 6, "TIM:", columnNameFormat); sheet.addCell(l); Set keys = TimImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = TimImage.get(key); String content = getContent(value); l = new Label(index, 6, content, detFormat); sheet.addCell(l); } } //将EQT报文信息写入报表文件 HashMap EqtImage = commonData.getEqtImage(); //Object totalInfos = commonData.getTotalInfos(); if(EqtImage != null) { Class thisClass = EqtImage.getClass(); l = new Label(0, 7, "EQT:", columnNameFormat); sheet.addCell(l); Set keys = EqtImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = EqtImage.get(key); String content = getContent(value); l = new Label(index, 7, content, detFormat); sheet.addCell(l); } } //将CNL报文信息写入报表文件 HashMap CnlImage = commonData.getCnlImage(); //Object totalInfos = commonData.getTotalInfos(); if(CnlImage != null) { Class thisClass = CnlImage.getClass(); l = new Label(0, 8, "CNL:", columnNameFormat); sheet.addCell(l); Set keys = CnlImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = CnlImage.get(key); String content = getContent(value); l = new Label(index, 8, content, detFormat); sheet.addCell(l); } } //将RTE报文信息写入报表文件 HashMap RteImage = commonData.getRteImage(); //Object totalInfos = commonData.getTotalInfos(); if(RteImage != null) { Class thisClass = RteImage.getClass(); l = new Label(0, 9, "RTE:", columnNameFormat); sheet.addCell(l); Set keys = RteImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = RteImage.get(key); String content = getContent(value); l = new Label(index, 9, content, detFormat); sheet.addCell(l); } } //将所有报文信息写入报表文件 HashMap AllImage = commonData.getAllImage(); //Object totalInfos = commonData.getTotalInfos(); if(AllImage != null) { Class thisClass = AllImage.getClass(); l = new Label(0, 10, "所有报文:", columnNameFormat); sheet.addCell(l); Set keys = AllImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = AllImage.get(key); String content = getContent(value); l = new Label(index, 10, content, detFormat); sheet.addCell(l); } } //将所占比例信息写入报表文件 HashMap ShareImage = commonData.getShareImage(); if(ShareImage != null) { Class thisClass = ShareImage.getClass(); l = new Label(0, 11, "所占比例:", columnNameFormat); sheet.addCell(l); Set keys = ShareImage.keySet(); Iterator itor = keys.iterator(); while(itor.hasNext()) { String key = ((String) itor.next()).trim(); int index = 1; for(int i = 1; i < titles.length; i++) { if(key.equals(titles[i][0].trim())) { index = i; break; } } Object value = ShareImage.get(key); String content = getContent(value); l = new Label(index, 11, content, detFormat); sheet.addCell(l); } } //将图片1信息写入报表文件 String reportImage = commonData.getReportImage1();// sheet.addCell(new Label(0, 12, "报文处理结果", columnNameFormat)); // 展示图片标题// sheet.mergeCells(0, 12, 5, 12); // 合并图片标题单元格 File fileImage = new File(reportImage); // 获得图片 WritableImage image = new WritableImage(0, 13, 6, 22, fileImage); // 设置图片显示位置 sheet.addImage(image); // 加载图片 //将图片2信息写入报表文件 String reportImage2 = commonData.getReportImage2();// sheet.addCell(new Label(8, 12, "报文数量", columnNameFormat)); // 展示图片标题// sheet.mergeCells(8, 12, 7, 0); // 合并图片标题单元格 File fileImage2 = new File(reportImage2); // 获得图片 WritableImage image2 = new WritableImage(6, 13, 6, 22, fileImage2); // 设置图片显示位置 sheet.addImage(image2); // 加载图片 workbook.write(); } catch (Exception e) { e.printStackTrace(); } finally { if(workbook!=null){ try {workbook.close();} catch (IOException e) {e.printStackTrace();} } } } private String getContent(Object fieldValue) { String content = ""; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); if(fieldValue == null) { content = ""; } else if(fieldValue instanceof String) { content = (String) fieldValue; } else if(fieldValue instanceof Integer) { content = fieldValue.toString(); } else if(fieldValue instanceof Double) { //需要消除科学计数法 Double value = (Double) fieldValue; value = ArithUtil.round(value, 2); content = df.format(value); //content = fieldValue.toString(); } else if(fieldValue instanceof Float) { //需要消除科学计数法 Float value = (Float) fieldValue; Double dValue = new Double(value); dValue = ArithUtil.round(dValue, 2); content = df.format(dValue);// content = fieldValue.toString(); } else if(fieldValue instanceof Date) { content = format.format(fieldValue); } else if(fieldValue instanceof Boolean) { content = fieldValue.toString(); } else if(fieldValue instanceof Long) { content = fieldValue.toString(); } else if(fieldValue instanceof BigDecimal) { ((BigDecimal)fieldValue).setScale(2,java.math.BigDecimal.ROUND_HALF_UP); content = df.format(fieldValue); } return content; }}
当出现大数据的时候一次性导出的时候很常会内存溢出:我就想到一个直接用流导出,但是不能设置样式
import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.Collection;import java.util.Date;import java.util.Iterator;public class ReportForLee {private String fileName;private CommonExcelData commonData;private DecimalFormat df = new DecimalFormat("0.00"); public ReportForLee(String fileName, CommonExcelData commonData) {this.fileName = fileName;this.commonData = commonData;}public void generateReport( )throws Exception {File file = new File(fileName);FileOutputStream out = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(out, "GB2312"); BufferedWriter bw = new BufferedWriter(osw); StringBuffer sbTitle = new StringBuffer(); // 创建表头 String[][] titles = commonData.getColumnTitles(); for (int i = 0; i < titles.length; i++) { sbTitle.append(titles[i][1]).append("\t"); } sbTitle.append("\r\n"); bw.write(sbTitle.toString()); StringBuffer mess = new StringBuffer(); Collection<?> list = commonData.getDatas(); if(list != null) { Iterator<?> iter = list.iterator(); while(iter.hasNext()) { Object obj = iter.next(); Class<? extends Object> thisClass = obj.getClass(); for(int j = 0; j < titles.length; j++) { String fieldName = titles[j][0]; Field field = thisClass.getDeclaredField(fieldName); Class<?> fieldType = field.getType(); //取属性数据类型 String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); if(fieldType.getName().equals("java.lang.Boolean")) { //布尔数据类型的属性获得方法以is开头 getMethodName = "is" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); } Method getMethod = thisClass.getMethod(getMethodName, new Class[]{}); Object fieldValue = getMethod.invoke(obj, new Object[]{}); String content = getContent(fieldValue); mess.append(content).append("\t"); } mess.append("\r\n"); } } bw.write(mess.toString()); bw.close(); osw.close(); out.close(); } private String getContent(Object fieldValue) { String content = ""; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); if(fieldValue == null) { content = ""; } else if(fieldValue instanceof String) { content = (String) fieldValue; } else if(fieldValue instanceof Integer) { content = fieldValue.toString(); } else if(fieldValue instanceof Double) { //需要消除科学计数法 Double value = (Double) fieldValue; value = ArithUtil.round(value, 2); content = df.format(value); //content = fieldValue.toString(); } else if(fieldValue instanceof Float) { //需要消除科学计数法 Float value = (Float) fieldValue; Double dValue = new Double(value); dValue = ArithUtil.round(dValue, 2); content = df.format(dValue);// content = fieldValue.toString(); } else if(fieldValue instanceof Date) { content = format.format(fieldValue); } else if(fieldValue instanceof Boolean) { content = fieldValue.toString(); } else if(fieldValue instanceof Long) { content = fieldValue.toString(); } else if(fieldValue instanceof BigDecimal) { ((BigDecimal)fieldValue).setScale(2,java.math.BigDecimal.ROUND_HALF_UP); content = df.format(fieldValue); } return content; } }
- java 操作Excel文件一些感悟(内存溢出)
- java 读 大文件excel 内存溢出 解决
- 读excel时候出现java内存溢出
- Java导出excel 内存溢出 使用缓存
- java导出2007excel--防止内存溢出
- java分配内存的一些感悟
- 关于Java内存溢出的一些思考
- java操作大数字内存溢出问题
- JAVA操作EXCEL文件
- JAVA 操作EXCEL文件
- Java操作Excel文件
- java操作excel文件()
- JAVA操作Excel文件
- java操作excel文件
- java操作excel文件
- java操作Excel文件
- JAVA 操作 EXCEL 文件
- JAVA操作Excel文件
- 什么是汉明窗?加Hanmming窗的作用?
- java面试题经典20例【第二季_常瑞鹏】
- [转载]Android - 文件读写操作
- 《为了看看阳光,我来到这世上》
- leetcode - Palindrome Partitioning II
- java 操作Excel文件一些感悟(内存溢出)
- 集群之LVS(负载均衡)详解
- 根据IP定位地理位置
- 今天的收获 2013.4.19
- mssql 使用数据库代码直接生成文本记录
- 11个Visual Studio调试小技巧
- 转换字符串格式为原来字符串里的字符+该字符连续出现的个数
- Linux负载均衡软件LVS之一
- layoutSubviews何时调用的问题