0
点赞
收藏
分享

微信扫一扫

poi 导入 excel 反射导出、反射

黎轩的闲暇时光 2023-04-21 阅读 117


 

 

反射

import java.lang.reflect.Field;


public static void main(String[] args) {
        System.out.println(getFieldMapStr(new Result(true, "请", -1)).toString());
    }

    /**
     * 获取字段(反射)
     *
     * @param args
     * @param <T>
     * @return
     */
    public static <T> Map<String, Object> getFieldMapStr(T args) {
        Map<String, Object> res = new HashMap<>();
        Field[] fields = args.getClass().getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            //设置是否允许访问,不是修改原来的访问权限修饰词。
            fields[i].setAccessible(true);
            try {
                res.put(fields[i].getName(), fields[i].get(args));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return res;
    }

    public static String getFieldStr(String field) {
        if (not(field)) {
            return "";
        }
        return field.replace("get", "").toLowerCase();
    }

 

{msg=请, NO_PERMISSION=2, serialVersionUID=1, NO_LOGIN=-1, SUCCESS=0, code=-1, data=true, FAIL=1}

 

 

 

反射导出

针对简单excel导出下载(利用反射完成):

public void export(
			 //wb为HSSFWorkbook对象由于我写的时候需要创建多个sheet故每次调用传同一个wb
			 //sheetName就是工作簿的名字,此处工作簿的名字不能相同
			 //columns 由于差的数据并一定需要将整个javabean全部属性都导出,故传所需name进行get方法拼接
			 //headers用于传入每个sheet中第一排每一列的列名,不可能直接给客户看属性名对吧!
			 HSSFWorkbook wb,String sheetName,String[] headers, String[] columns,List<T> lists) 
	            		throws Exception 
	        {
	           //创建一个空的sheet工作簿
	            HSSFSheet sheet = wb.createSheet(sheetName);
	            //列宽
	            sheet.setDefaultColumnWidth(15);
	            HSSFCellStyle style = wb.createCellStyle();
 
	            HSSFRow row = sheet.createRow(0);
	            style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
	            //设置列名
	            for (int i = 0; i < headers.length; i++) {
	                HSSFCell headerCell = row.createCell(i);
	                headerCell.setCellValue(headers[i]);
	                headerCell.setCellStyle(style);
	            }
	           //遍历对象
	            Iterator<T> it = lists.iterator();
	            int rowIndex = 0;
	            while (it.hasNext()) {
	                rowIndex++;
	                row = sheet.createRow(rowIndex);
	                Object t =it.next();
	                //得到某个对象的所有属性
	                Field[] fields = t.getClass()
	                            .getDeclaredFields();
	                //进行对比,有就执行拼接,进行get,invoke赋值
	                for (int i = 0; i < fields.length; i++) {
	                    Field field = fields[i];
	                    String fieldName = field.getName();
 
	                    for (int j = 0; j < columns.length; j++) {
	                        if (fieldName.equals(columns[j])) {
	                        String getMethodName = "get" + 
	                            fieldName.substring(0, 1).
	                            toUpperCase() + fieldName.
	                            substring(1);
	                        Class cls = t.getClass();
 
	                        Method getMethod = cls.getMethod(
	                            getMethodName, new Class[] {});
	                        Object val = getMethod.invoke(
	                            t, new Object[] {});
	                        String textVal = null;
	                        if (null != val) {
	                            textVal = val.toString();
	                        } else {
	                            textVal = null;
	                        }
	                            row.createCell(j).
	                                setCellValue(textVal);
	                    }
	                }
	            }
	        }
 
	    }

 

开启:对象

//创建一个excel对象
		HSSFWorkbook wb = new HSSFWorkbook();
		String sheetName1="工作簿名";
		String [] headers1={"第一列名1”,"","","",""};
		String [] columns1={"属性名1","","","","",""};

 

调用

List<T> list1=(List<T>) iBusinessManagerService3.countQsqy(params).getData();
			iBusinessManagerService3.export(wb, sheetName1, headers1, columns1, list1);

 

导出:下载式

response.setContentType("application/OCTET-STREAM;charset=utf-8");
//			//	         设置文件头:最后一个参数是设置下载文件名 
				 response.addHeader("Content-Disposition", "attachment;filename=" + new String("excel名字".getBytes(),"ISO8859-1") + ".xls");
//			//	         获取输出流
			 OutputStream out = null;
			 out = response.getOutputStream();
			 wb.write(out); 
			 out.flush();
			 out.close();

 

代码

boot-poi

 方法

 

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>RELEASE</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>RELEASE</version>
</dependency>

前者用于引入HSSFWorkbook;后者用于引入XSSFWorkbook

             xls(03版本)                   和xlsx(07及之后版本)

public Boolean isExcelNew(String path){

        return path.matches("^.+\\.(?i)(xlsx)$");
    }

    public Boolean isExcelOld(String path){

        return path.matches("^.+\\.(?i)(xls)$");
    }

 

举报

相关推荐

0 条评论