poi写了个模板工具感觉还是不够完善,求完善,求思路!解决思路
poi写了个模板工具感觉还是不够完善,求完善,求思路!~
在使用这个工具时当数据量太大时会报错(好像是exl不能超出6万多数据),我尝试超过一定量换菜单,但是没有效果,求大侠鞋空闲看看,有代码有真相!~·
在使用这个工具时当数据量太大时会报错(好像是exl不能超出6万多数据),我尝试超过一定量换菜单,但是没有效果,求大侠鞋空闲看看,有代码有真相!~·
- Java code
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()); } }