调用的接口,参数有表头,实体类,实体类参数名,文档名字
表头是制作EXCEL文档的列名
实体类,每列的的值,
参数名,通过参数名去取值
/**
*
* @param menu 表头 ,如单号 ,客户名称 ,数量,金额等,以逗号拼接; * @param obj entity * @param name 文档名字 * @param parameter 实体类参数名,按照excel表头顺序以逗号拼接,注意要和表头lits数据长度一致 * @return 文件路径 */ @SuppressWarnings("deprecation") public static String making(String menu,List<Object> obj,String name,String parameter)throws DbException,Exception{ //创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // String path = "/jade/zsy/storage/report/daily/excel/"+name+".xls"; //在webbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet(name); //在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short HSSFRow row = sheet.createRow((int) 0); //创建单元格,并设置值表头 List<String[]> sheetValue = jsonSplit(parameter,obj); String[] menuArray = menu.split(","); for(int i=0;i<menuArray.length;i++){ HSSFCell cell = row.createCell((short) i); cell.setCellValue(menuArray[i]); } for(int i=0;i<sheetValue.size();i++){ HSSFRow sheetrow = sheet.createRow((int) i+1); String[] sheetv = sheetValue.get(i); for(int j=0;j<sheetv.length;j++){ HSSFCell cell = sheetrow.createCell((short) j); cell.setCellValue(sheetv[j]); } } //8、输入excel FileOutputStream os= new FileOutputStream(path); wb.write(os); if(os!=null){ os.close(); } File file =new File(path); if (!file .exists() && !file .isDirectory()) { throw new DbException(MsgUtil.RECODRD_NO,name+ "创建失败"); } return path; }
这个方法是获取实体类值的集合
/** * * @param json 实体类的参数名,以逗号拼接,拼接顺序一定要和制作excel表头一致 * @param objArray 获取的实体类集合 * @return 处理的实体类值的集合 */ private static List<String[]> jsonSplit(String json,List<Object> objArray)throws Exception{ //一个实体类生成一行数据,一个数组, List<String[]> jsonarray = new ArrayList<String[]>(); if(json!=null&&!json.equals("")){ for(Object obj:objArray) { //将拼接的参数名拆分 String[] jsonc = json.split(","); //以参数名的个数来定义一行实体类生成的数组长度 int length = jsonc.length; String[] entityArray = new String[length]; //循环通过参数名获取该参数的返回值 for(int i=0;i<jsonc.length;i++){ //参数值 String pvalue = getEntityValue(obj, jsonc[i]); entityArray[i] = pvalue; } jsonarray.add(entityArray); } } return jsonarray; }
这个方法是获取实体类参数的值
/** * 获取entity的参数的值 * @param object 传入的实体类 * @param name 需要获取的参数命 ,一定要和参数一致 * @return 返回参数的值 */ private static String getEntityValue(Object object,String name) throws Exception{ //定义返回值 String pvalue = ""; if(object!=null){ if(name!=null&&!name.equals("")){ //将参数命首字母大写 String newName = name.substring(0, 1).toUpperCase()+name.substring(1); //通过反射来获取参数的值 Method m = object.getClass().getMethod("get"+newName); Object parameters = m.invoke(object); if(parameters!=null){ pvalue = parameters.toString(); } } } return pvalue; }