根据实体类去生成EXCEL表

调用的接口,参数有表头,实体类,实体类参数名,文档名字

表头是制作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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值