【java】反射+poi 导出excel

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

反射 导出的数组转变成对象

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css设置背景图片大小_如何使用CSS设置背景图片大小?

css设置背景图片大小Introduction: 介绍&#xff1a; As we all know that the images are a very responsive yet very creative way to display your web page or website to the users. The images also play a major role in indulging users to websites or web pages. T…

avr计数_使用8位LCD创建计数器| AVR

avr计数This type of counter may be also used in the EVM machines. A counter can be used to count the number of times a button is pressed. It can have many applications. The most widely used counter application is in EVM and also in customer feedback machin…

php将字符变为数字,数字字符怎么转化为数字 php 怎么将字符转成数字

java中&#xff0c;String字符串转化为数字我现在想把一个String字符串转化为数字&#xff0c; String s"00000123" 我直接使java中String字符串转化为数字&#xff1a; 转换为浮点型&#xff1a; 使用Double或者Float的parseDouble或者parseFloat方法进行转换 Strin…

用U盘作为启动盘做系统步骤

步骤一&#xff1a;BIOS设置U盘启动 制作好Win10 U盘系统安装盘之后&#xff0c;我们需要在电脑的BIOS设置中把第一启动设备设置为U盘&#xff0c;设置后就可以从我们制作的Win10 U盘系统安装盘启动&#xff0c;从而显示系统安装界面开始安装系统。BIOS设置U盘启动的方法如下&a…

使用tkinter模块在Python中进行GUI编程

GUI (Graphical User Interface): GUI(图形用户界面)&#xff1a; GUI is a simple application which helps the user to interact with the computer or any other electronic device through a graphical icon. This used to perform different tasks on a desktop or lapt…

Composer学习之————Ubuntu14.04下安装Composer

下载Composer&#xff1a; curl -sS https://getcomposer.org/installer | php 安装Composer&#xff1a; /usr/bin/php composer.phar --version 设置全局命令&#xff1a; sudo mv composer.phar /usr/local/bin/composer 查看是否安装与设置成功&#xff1a; composer -vers…

java如何解决高并发症,JAVA线上故障紧急处理详细过程!

链接&#xff1a;https://fredal.xin/java-error-check?hmsrtoutiao.io&utm_mediumtoutiao.io&utm_sourcetoutiao.io线上故障主要会包括 CPU、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行排查时候尽量四个方面依…

php 查看扩展 代码,[扩展推荐] 使用 PHP Insights 在终端查看 PHP 项目代码质量

PHP Insights 是一个由 Nuno Maduro 发布的、可在控制台进行 PHP 即时质量检查的拓展包。在项目的 readme 文件中&#xff0c;可以发现 PHP Insights 的主要功能包含&#xff1a;代码质量 与 代码风格 分析一个针对于代码 结构 和 复杂度 的漂亮的预览界面在 Laravel、Symfon…

航空机票预订c#代码_航空公司座位预订问题的C ++程序

航空机票预订c#代码Problem statement: Write a program to assign passengers seats in an airplane. Assume a small airplane with seat numbering as follows: 问题陈述&#xff1a;编写一个程序来分配飞机上的乘客座位。 假设小型飞机的座位编号如下&#xff1a; 1 A B C…

linux命令之which

which这个命令可以说并不常用&#xff0c;它的作用是查看可执行文件的位置&#xff0c;并返回第一个搜索结果。可执行文件也就是指的某个系统命令&#xff0c;但是这个命令的位置必须是在PATH路径里存在的。截图中 &#xff0c;pwd的位置在/bin/pwd,当然&#xff0c;这个路径是…

线性代数向量乘法_向量的标量乘法| 使用Python的线性代数

线性代数向量乘法Prerequisite: Linear Algebra | Defining a Vector 先决条件&#xff1a; 线性代数| 定义向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a mat…

html的学习思维导图

转载于:https://www.cnblogs.com/lingdublog/p/6438088.html

cubic-bezier_带CSS中的示例的cube-bezier()函数

cubic-bezierIntroduction: 介绍&#xff1a; How many times have we come across the word function? Well, it would not be wrong to say a lot. The fact that functions are used in web development while developing a website or web page is very important. There…

上手Caffe(一)

author&#xff1a;oneBite 本文记录编译使用caffe for windows 使用环境 VS2013 ultimate,win7 sp1,caffe-windows源码&#xff08;从github上下载caffe的windows分支&#xff0c;下载解压之后&#xff0c;不要改变原有的目录结构,因为solution rebuild时会使用文件的相对路径…

关于设置不同linux主机之间ssh免密登录简易方法

2019独角兽企业重金招聘Python工程师标准>>> 在linux日常中&#xff0c;经常会有ssh链接其他主机服务器的action,也学习过大家日常用配置ssh免密登录的方法。 小编今天在这里给大家介绍一种比较简单的配置linux主机ssh免密登录的方法。 两台主机的IP地址&#xff1a…

java自定义线程池池,线程池使用及自定义线程池

一 案例引申编写代码同时只允许五个线程并发访问(以下文的函数为例子)private static void method() {System.out.println("ThreadName" Thread.currentThread().getName() "进来了");Thread.sleep(2000);System.out.println("ThreadName" Th…

impala和mysql语法,impala CREATE TABLE语句

CREATE TABLE语句用于在Impala中的所需数据库中创建新表。 创建基本表涉及命名表并定义其列和每列的数据类型。语法以下是CREATE TABLE语句的语法。 这里&#xff0c;IF NOT EXISTS是一个可选的子句。 如果使用此子句&#xff0c;则只有在指定数据库中没有具有相同名称的现有表…

Java二维数组谷电,java二维数组遍历的2种代码

二维数组遍历&#xff1a;思想&#xff1a;1.先将二维数组中所有的元素拿到2.再将二维数组中每个元素进行遍历&#xff0c;相当于就是在遍历一个一维数组第一种方法&#xff1a;双重for循环//遍历二维数组public class Traverse_a_two_dimensional_array {public static void m…

MATLAB元胞自动机报告,元胞自动机概述与MATLAB实现

什么是元胞自动机&#xff1f;元胞自动机(cellular automata&#xff0c;CA) 是一种时间、空间、状态都离散&#xff0c;空间相互作用和时间因果关系为局部的网格动力学模型&#xff0c;具有模拟复杂系统时空演化过程的能力。它能构建随时间推移发生状态转移的系统&#xff0c;…

php session redis db,php session redis 配置

具体环境&#xff1a;一台apachephp的服务器(yum安装remi源及配置 httpd-2.2.15 php-5.4.45)一台redis服务器(yum安装remi源及配置 redis-3.2.6)保证apache服务器可以访问redis服务器的6379端口具体步骤&#xff1a;1、在apachephp服务器上安装redis扩展点击(此处)折叠或打开yu…