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

转载于:https://my.oschina.net/v512345/blog/842016

【java】反射+poi 导出excel相关推荐

  1. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  2. java中poi导出Excel表格(前台流文件接收)

    java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...

  3. Java操作poi导出Excel自定义字体颜色

    Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...

  4. Java和poi导出excel报表

    一:poi jar下载地址:点击打开链接: 二:工程截图: 三:运行效果截图: 四:源代码: Student.java: package com.poi.bean;import java.util.D ...

  5. Java使用POi导出Excel(包含图片)

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  6. java 使用poi导出excel,可控制固定前2列固定标头排版,带统计数据格式的

    使用poi导出排版漂亮的excel文件 html代码: <button class="btn btn-link" ng-model="exportExcel&quo ...

  7. poi导出excel 损坏_急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”...

    展开全部 两个原因: 1.你的excel模版本身有问题,可以尝试新建一个模版. 2.你的excel使用了一e68a8462616964757a686964616f31333365643662些POI不 ...

  8. java通过poi导出excel和pdf

    [背景] 由于各户的需求,所以需要增加导出excel这个功能,其实大部分系统都需要这个导出功能的,所以这里也就不详细说明具体导出的背景了O(∩_∩)O~ 干完导出excel将现有的导出pdf也进行了独 ...

  9. java使用poi导出Excel表发回浏览器或是保存到本地

    在实际工作中不可避免的会遇上统计.导出报表的工作,我自己整理了一份导出Excel代码放到这里,即为了分享知识,也是对自己的总结 首先导入依赖 <dependency><groupId ...

最新文章

  1. 尝试在视图不在窗口层次结构中的UIViewController上呈现UIViewController
  2. SAP WebIDE 里的 neo-app.json 文件用途
  3. python和matlab交互_MATLAB调用python,交互
  4. 携程集团副总裁王韦:探索携程度假农庄发展新路径 打造“一村一旅游目的地”...
  5. ajax get怎么传参数值,如何使用jQuery在GET请求中传递参数
  6. 领酌酒业:一文阅尽酱香酒
  7. Lapack求解线性方程组
  8. mysql数据库任务驱动式教程课后答案_MySQL数据库任务驱动式教程
  9. 白鸦:我印象中的Keso
  10. web developer tips (56):手动更新JScript的智能感知
  11. C C++回调函数和java的回调函数
  12. 倒计时按钮_倒计时牌都不会做,妹子何必嫁这货
  13. 程序员客栈(项目简介)
  14. 路飞学城Python-Day2
  15. 【20CSPS提高组】函数调用
  16. 怎样用360改计算机名称,360随身wifi网络名称怎么修改
  17. 在vue项目中使用阿里云播放器
  18. 海量上传文件服务器端,bat批量上传ftp文件到服务器
  19. python setting.py_python基础教程:Django框架的中的setting.py文件说明详解
  20. Nginx介绍和使用

热门文章

  1. java背景图片加上组件_关于 java swing组件加背景图片的问题
  2. opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法
  3. 龙贝格数值分析作业c语言,数值分析龙贝格实验报告.doc
  4. c语言在函数中只执行一次,请问大家,为什么我调用我定义的函数俩次,但是程序只执行一次...
  5. dvwa安装包linux,dvwa安裝、配置、使用教程(Linux)
  6. django与mysql实现增删_django与mysql实现简单的增删查改
  7. linux查看文件位置命令bwd,linux 操作系统中find文件搜索命令的使用
  8. 【Java中级篇】使用zxing生成二维码
  9. Oracle对象被锁如何处理
  10. python获取方法的装饰方法_python中的方法和装饰器