在使用这个工具时当数据量太大时会报错(好像是exl不能超出6万多数据),我尝试超过一定量换菜单,但是没有效果,求大侠鞋空闲看看,有代码有真相!~·import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class WorkBookPoiUtil {
private static List<short[]> widths ;
private LinkedHashMap<String, List<?>> map ;
private List<LinkedHashMap<String, String>> titles ;
/**
*
* @param map String为菜单名称 ,对应List数据
* @param titles Key为title名称 , value为title属性名称 和 map 对应 title 和 属性 一一对应
*/
public WorkBookPoiUtil(LinkedHashMap<String, List<?>> map , List<LinkedHashMap<String, String>> titles ){
this(map, titles, null);
}
/**
*
* @param map String为菜单名称 ,对应List数据
* @param titles Key为title名称 , value为title属性名称 和 map 对应 title 和 属性 一一对应
* @param width 设置每一列宽度
*
*/
public WorkBookPoiUtil(LinkedHashMap<String, List<?>> map , List<LinkedHashMap<String, String>> titles , List<short[]> widths ){
this.widths = widths;
this.map = map ;
this.titles = titles;
}
public static void setSheet(LinkedHashMap<String, String> map, List<?> list,HSSFSheet s ,short[] width ) throws Exception{ List<String> strings = new ArrayList<String>();
int i =0 ;
for (String key : map.keySet()) {
if(width==null || width.length<= i)
s.setColumnWidth((short) i,(short)6000);
else
s.setColumnWidth((short) i, width[i]);
s.createRow(0).createCell((short) i).setCellValue(new HSSFRichTextString(key) );
strings.add(map.get(key));
i= i+1 ; }
for (int j = 1; j < list.size()+1; j++) {
for (int j2 = 0; j2 < strings.size(); j2++) {
Class<?> class1 = list.get(j-1).getClass();
String methodName = "get" + strings.get(j2).substring(0, 1).toUpperCase()
+ strings.get(j2).substring(1);
Method method = class1.getMethod(methodName);
if ("java.util.Date".equals(method.getReturnType()
.getName())) {
s.createRow(j).createCell((short) j2).setCellValue(new HSSFRichTextString(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)method.invoke(list.get(j-1)))
));
}else{ s.createRow(j).createCell((short) j2).setCellValue(new HSSFRichTextString(method.invoke(list.get(j-1)).toString()));
} } }
}
/**
*
* @param pathName 指定路径生成
* @throws Exception
*/
public void getPathExel(String pathName) throws Exception{
FileOutputStream fos = new FileOutputStream(pathName);
HSSFWorkbook wb = new HSSFWorkbook();
int i = 0 ;
for (String key : map.keySet()) {
HSSFSheet s = wb.createSheet(key);
if(widths.size()<=i)
setSheet(titles.get(i) , map.get(key) , s , null);
else
setSheet(titles.get(i) , map.get(key) , s , widths.get(i));
i= i+1;
}
wb.write(fos);
fos.flush();
fos.close();
}
/**
*
* @return ByteArrayInputStream 一个流
* @throws Exception
*/
public ByteArrayInputStream getInputStreamExel() throws Exception{
ByteArrayOutputStream fos = new ByteArrayOutputStream();
HSSFWorkbook wb = new HSSFWorkbook();
int i = 0 ;
for (String key : map.keySet()) {
HSSFSheet s = wb.createSheet(key);
if(widths.size()<=i)
setSheet(titles.get(i) , map.get(key) , s , null);
else
setSheet(titles.get(i) , map.get(key) , s , widths.get(i));
i= i+1;
}
wb.write(fos);
return new ByteArrayInputStream(fos.toByteArray());
}
}
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class WorkBookPoiUtil {
private static List<short[]> widths ;
private LinkedHashMap<String, List<?>> map ;
private List<LinkedHashMap<String, String>> titles ;
/**
*
* @param map String为菜单名称 ,对应List数据
* @param titles Key为title名称 , value为title属性名称 和 map 对应 title 和 属性 一一对应
*/
public WorkBookPoiUtil(LinkedHashMap<String, List<?>> map , List<LinkedHashMap<String, String>> titles ){
this(map, titles, null);
}
/**
*
* @param map String为菜单名称 ,对应List数据
* @param titles Key为title名称 , value为title属性名称 和 map 对应 title 和 属性 一一对应
* @param width 设置每一列宽度
*
*/
public WorkBookPoiUtil(LinkedHashMap<String, List<?>> map , List<LinkedHashMap<String, String>> titles , List<short[]> widths ){
this.widths = widths;
this.map = map ;
this.titles = titles;
}
public static void setSheet(LinkedHashMap<String, String> map, List<?> list,HSSFSheet s ,short[] width ) throws Exception{ List<String> strings = new ArrayList<String>();
int i =0 ;
for (String key : map.keySet()) {
if(width==null || width.length<= i)
s.setColumnWidth((short) i,(short)6000);
else
s.setColumnWidth((short) i, width[i]);
s.createRow(0).createCell((short) i).setCellValue(new HSSFRichTextString(key) );
strings.add(map.get(key));
i= i+1 ; }
for (int j = 1; j < list.size()+1; j++) {
for (int j2 = 0; j2 < strings.size(); j2++) {
Class<?> class1 = list.get(j-1).getClass();
String methodName = "get" + strings.get(j2).substring(0, 1).toUpperCase()
+ strings.get(j2).substring(1);
Method method = class1.getMethod(methodName);
if ("java.util.Date".equals(method.getReturnType()
.getName())) {
s.createRow(j).createCell((short) j2).setCellValue(new HSSFRichTextString(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)method.invoke(list.get(j-1)))
));
}else{ s.createRow(j).createCell((short) j2).setCellValue(new HSSFRichTextString(method.invoke(list.get(j-1)).toString()));
} } }
}
/**
*
* @param pathName 指定路径生成
* @throws Exception
*/
public void getPathExel(String pathName) throws Exception{
FileOutputStream fos = new FileOutputStream(pathName);
HSSFWorkbook wb = new HSSFWorkbook();
int i = 0 ;
for (String key : map.keySet()) {
HSSFSheet s = wb.createSheet(key);
if(widths.size()<=i)
setSheet(titles.get(i) , map.get(key) , s , null);
else
setSheet(titles.get(i) , map.get(key) , s , widths.get(i));
i= i+1;
}
wb.write(fos);
fos.flush();
fos.close();
}
/**
*
* @return ByteArrayInputStream 一个流
* @throws Exception
*/
public ByteArrayInputStream getInputStreamExel() throws Exception{
ByteArrayOutputStream fos = new ByteArrayOutputStream();
HSSFWorkbook wb = new HSSFWorkbook();
int i = 0 ;
for (String key : map.keySet()) {
HSSFSheet s = wb.createSheet(key);
if(widths.size()<=i)
setSheet(titles.get(i) , map.get(key) , s , null);
else
setSheet(titles.get(i) , map.get(key) , s , widths.get(i));
i= i+1;
}
wb.write(fos);
return new ByteArrayInputStream(fos.toByteArray());
}
}
看到你把大量的数据都通过List的来传递,这会不会对内存有负担呢?数据量太大,内存崩溃了怎么办