2019独角兽企业重金招聘Python工程师标准>>>
反射 导出的数组转变成对象
private static Object expexcelMaptobean(Class<?> cobj,Map<String,String> map,int[] expColums,String[] params) throws InstantiationException, IllegalAccessException{Object t=cobj.newInstance();Set<Entry<String, String>> set=map.entrySet();int i=0;for(Entry<String, String> s:set){String field=s.getKey();field=field.substring(0,1).toUpperCase()+field.substring(1);try {Method m = null ;for(Class<?> clazz = cobj; clazz != Object.class ; clazz = clazz.getSuperclass()) {Method[] mehhods= clazz.getDeclaredMethods();for(Method md:mehhods){if(("set"+field).equals(md.getName())){Type[] paramclass=md.getParameterTypes();for(Type paramType:paramclass){String paramval=params[expColums[i]]+"";m =clazz.getDeclaredMethod("set"+field,(Class[])paramclass) ;if(paramType.getTypeName().equals("java.math.BigDecimal") ){boolean isNum = paramval.matches("\\d+(\\.\\d+)?");if(!isNum){m.invoke(t,new BigDecimal(0));}else{m.invoke(t,new BigDecimal(paramval));}}else{m.invoke(t,paramval);}}}}}} catch (Exception e) {e.printStackTrace();}if(expColums[i]>params.length-1){break;}if(i==expColums.length-1 && (params.length>=expColums.length)){break;}i++;}return t;}
测试
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {String[] params={"100","10000","ccc","dddd","eeee"};int[] expColums={1,2};Map<String,String> titleMap = new LinkedHashMap<String,String>();titleMap.put("ackAmt", "产品代码"); titleMap.put("appno", "产品代码"); Bean f=(Bean )expexcelMaptobean(Bean.class,titleMap,expColums,params);System.out.println(f.getAckAmt());}
导出excel 工具类
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;public final class ExportExcel {public static String saveExpExcelDir; //导出excel保存位置private ExportExcel() {}static{Map<String,String> map = System.getenv();saveExpExcelDir="C:\\Users"+File.separator+map.get("USERNAME")+File.separator+"Desktop"+File.separator+"ccjj";}/**** 工作簿*/private static HSSFWorkbook workbook;/**** sheet*/private static HSSFSheet sheet;/**** 标题行开始位置*/private static final int TITLE_START_POSITION = 0;/**** 时间行开始位置*/private static final int DATEHEAD_START_POSITION = 0;/**** 表头行开始位置*/private static final int HEAD_START_POSITION = 0;/**** 文本行开始位置*/private static final int CONTENT_START_POSITION = 1;/*** * @param dataList* 对象集合* @param titleMap* 表头信息(对象属性名称->要显示的标题值)[按顺序添加]* @param sheetName* sheet名称和表头值*/public static void excelExport(List<?> dataList, Map<String, String> titleMap, String sheetName,String filepathandname) {initHSSFWorkbook(sheetName);// 初始化workbook// createTitleRow(titleMap, sheetName);// 标题行// createDateHeadRow(titleMap);// 时间行createHeadRow(titleMap);// 表头行createContentRow(dataList, titleMap);// 文本行// autoSizeColumn(100);//设置自动伸缩try {OutputStream out = new FileOutputStream(filepathandname);workbook.write(out);out.close();}catch (Exception e) {e.printStackTrace();}}/**** * @param sheetName* sheetName*/private static void initHSSFWorkbook(String sheetName) {workbook = new HSSFWorkbook();sheet = workbook.createSheet(sheetName);}/*** 生成标题(第零行创建)* @param titleMap 对象属性名称->表头显示名称* @param sheetName sheet名称*/private static void createTitleRow(Map<String, String> titleMap, String sheetName) {CellRangeAddress titleRange = new CellRangeAddress(0, 0, 0, titleMap.size() - 1);sheet.addMergedRegion(titleRange);HSSFRow titleRow = sheet.createRow(TITLE_START_POSITION);HSSFCell titleCell = titleRow.createCell(0);titleCell.setCellValue(sheetName);}/*** 创建时间行(第一行创建)* @param titleMap 对象属性名称->表头显示名称*/private static void createDateHeadRow(Map<String, String> titleMap) {CellRangeAddress dateRange = new CellRangeAddress(1, 1, 0, titleMap.size() - 1);sheet.addMergedRegion(dateRange);HSSFRow dateRow = sheet.createRow(DATEHEAD_START_POSITION);HSSFCell dateCell = dateRow.createCell(0); dateCell.setCellValue(new SimpleDateFormat("yyyy年MM月dd日").format(new Date()));}/*** 创建表头行(第二行创建)* @param titleMap 对象属性名称->表头显示名称*/private static void createHeadRow(Map<String, String> titleMap) {// 第1行创建HSSFRow headRow = sheet.createRow(HEAD_START_POSITION);int i = 0;for (String entry : titleMap.keySet()) {HSSFCell headCell = headRow.createCell(i);headCell.setCellValue(titleMap.get(entry));i++;}}/*** * @param dataList 对象数据集合* @param titleMap 表头信息*/private static void createContentRow(List<?> dataList, Map<String, String> titleMap) {try {int i=0;for (Object obj : dataList) {HSSFRow textRow = sheet.createRow(CONTENT_START_POSITION + i);int j = 0;for (String entry : titleMap.keySet()) {String method = "get" + entry.substring(0, 1).toUpperCase() + entry.substring(1);Method m = null ;for(Class<?> clazz = obj.getClass(); clazz != Object.class ; clazz = clazz.getSuperclass()) {try { m = clazz.getDeclaredMethod(method, null) ; } catch (Exception e) { }}String value = m.invoke(obj, null).toString();HSSFCell textcell = textRow.createCell(j);sheet.setColumnWidth(j, letterCount(value,750,250));textcell.setCellValue(value);j++;}i++;}}catch (Exception e) {}}/*** 自动伸缩列(如非必要,请勿打开此方法,耗内存)* @param size 列数*/private static void autoSizeColumn(Integer size) { for (int j = 0; j < size; j++) {// sheet.autoSizeColumn(j);sheet.setColumnWidth(j, 256*size+184);}}/**创建文件夹**/public static String createDir(String destDirName){File dir = new File(destDirName); // if (!dir.exists()) { if (!destDirName.endsWith(File.separator)) { destDirName = destDirName + File.separator; }dir.mkdirs();// }return destDirName; }/**计算内容含有字体个数**/private static int letterCount(String message,int chinese_len,int other_len){if(message ==null){return 1;}Pattern p = Pattern.compile("[\u4E00-\u9FA5]+"); Matcher m = p.matcher(message); int zm=0;int num=0;int chinese=0;int other=0;char [] ch = message.toCharArray();for(int i=0;i<ch.length;i++){if((ch[i]>='a' && ch[i]<='z') || (ch[i]>='A' && ch[i]<='Z')){zm=zm+1;}else if(ch[i]>47 && ch[i]<58){num=num+1;}if(m.find()){chinese=chinese+m.group(0).length()+1;}else{other=other+1;other=(other-chinese)<=0?1:(other-chinese);}}int totalcount=(chinese*chinese_len)+(zm+num+(other))*other_len;return totalcount;}}