`
nenyalanye_1
  • 浏览: 50374 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jxl导出excel文件的例子,用了java反射

    博客分类:
  • java
阅读更多
最近看了下java的反射内容,自己大概有了一点点概念。主要学习了 Method 和 Field对象的基本用法。所以用反射做了个导出。主要作用是把list列表里的对象的属性与要导出的属性对应上,在业务层我们只需要放入对象集合。和一定的简单规则那么就可以生成相应的excel文件。考虑的不好的地方请各位指出
转换类:
public class CommunUtil {
     //将对象转换为 Map
    public static Map getMap(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {

          Map objectMsp = new HashMap();
          //获得对象的类型
          Class classType = obj.getClass();
          //通过构造方法创建一个对象
          Object objCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});

          Field[]  fields = classType.getDeclaredFields();
          for(int i=0;i<fields.length;i++){
              Field field = fields[i];
              String fieldName = field.getName();//获得属性名称
              //getXXX 和 setXXX 方法
              String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
              Method getMethod = classType.getDeclaredMethod(getMethodName,new Class[]{});
              Object value =   getMethod.invoke(obj,new Object[]{});
              objectMsp.put(fieldName,value);
              //设置对象 相应的属性的值
          }
          return  objectMsp;
      }

    //复制一个对象
     public static Object getObject(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {

          Map objectMsp = new HashMap();
          //获得对象的类型
          Class classType = obj.getClass();
          //通过构造方法创建一个对象
          Object objCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
          Field[]  fields = classType.getDeclaredFields();
          for(int i=0;i<fields.length;i++){
              Field field = fields[i];
              String fieldName = field.getName();//获得属性名称

              //getXXX 和 setXXX 方法
              String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
              String setMethodName =  "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);

              Method getMethod = classType.getDeclaredMethod(getMethodName,new Class[]{});
              Method setMethod = classType.getDeclaredMethod(setMethodName,new Class[]{field.getType()});

              Object value =   getMethod.invoke(obj,new Object[]{});
           // System.out.println("fieldName : " + value + field.getType());
              //设置对象 相应的属性的值
              setMethod.invoke(objCopy,new Object[]{value});

          }
          return  objCopy;
      }
}

规则类:
public abstract class Rules implements Serializable {

   // StreamTokenizer  streamTokenizer =
    protected List[] rowTitle;
    protected Map<String,String> rowMap;
    protected List cols;

    protected Map<Integer,String> rMap;

    public Map<Integer, String> getRMap() {
        return rMap;
    }

    public void setRMap(Map<Integer, String> rMap) {
        this.rMap = rMap;
    }

    public Rules(){
        rMap = new HashMap<Integer,String>();
       rowMap  =  new HashMap<String,String>();
       cols = new ArrayList();
       this.init();
    }

    public Rules(Map<String,String> r){
        rMap = new HashMap<Integer,String>();
        this.rowMap = r;
        cols = new ArrayList();
        this.init();
    }
    public abstract void init();

    public List[] getRowTitle() {
        return rowTitle;
    }

    public void setRowTitle(List[] rowTitle) {
        this.rowTitle = rowTitle;
    }

    public abstract void setRowTitle();

    public Map<String, String> getRowMap() {
        return rowMap;
    }

    public void setRowMap(Map<String, String> rowMap) {
        this.rowMap = rowMap;
    }

    public List getCols() {
        return cols;
    }

    public void setCols(List cols) {
        this.cols = cols;
    }
}

具体规则类
public class UserRules extends Rules {
    public void init() {
        //To change body of implemented methods use File | Settings | File Templates.
        //初始化时设置相应的字段
         this.rMap.put(new Integer(rMap.size()),"userName");
         this.rMap.put(new Integer(rMap.size()),"userAddress");
         this.rMap.put(new Integer(rMap.size()),"userAge");
         this.rMap.put(new Integer(rMap.size()),"clickCount");
         this.rMap.put(new Integer(rMap.size()),"userLong");
        this.rMap.put(new Integer(rMap.size()),"userSalary");
       //  this.rMap.put(new Integer(rMap.size()),"userMount");
        this.setRowTitle();
    }

    //设置标题格式
    public void setRowTitle() {
        //To change body of implemented methods use File | Settings | File Templates.
        this.rowTitle = new List[2];
        List  rList = new ArrayList();
        rList.add(new String[]{"用户姓名","1","0"});
        rList.add(new String[]{"用户地址","0","1"});
        rList.add(new String[]{"用户年龄","0","1"});
        rList.add(new String[]{"大列标题","1","1"});

        this.rowTitle[0] = rList;
        List  rList2  = new ArrayList();
        rList2.add(new String[]{"用户姓名","0","0"});
        rList2.add(new String[]{"点击数","0","0"});
        rList2.add(new String[]{"总数","0","0"});
        rList2.add(new String[]{"工资","0","0"});
        rList2.add(new String[]{"用户数量","0","0"});
      //  rList2.add(new String[]{"大列标题1","0","0"});
     //   rList2.add(new String[]{"大列标题2","0","0"});
      //  rList.add(new String[]{"大列标题","0","0"});
        this.rowTitle[1] = rList2;
    }
}


vo对象类
public class User {
     private String userName;
    private String userAddress;
    private int userAge;
    private int clickCount;
    private long  userLong;
    private String userSalary;
    private String userMount;
    public String getUserName() {
    return userName;
}

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public int getClickCount() {
        return clickCount;
    }

    public void setClickCount(int clickCount) {
        this.clickCount = clickCount;
    }

    public long getUserLong() {
        return userLong;
    }

    public void setUserLong(long userLong) {
        this.userLong = userLong;
    }

    public String getUserSalary() {
        return userSalary;
    }

    public void setUserSalary(String userSalary) {
        this.userSalary = userSalary;
    }

    public String getUserMount() {
        return userMount;
    }

    public void setUserMount(String userMount) {
        this.userMount = userMount;
    }
}


测试类:
public class ExcelWriter {
    public static void main(String [] args){
//        Date d1 = new Date(System.currentTimeMillis()-604800000L);
//        Date d2 = new Date();
//        System.out.println(d1+"\n" + d2);
        ExcelWriter writer = new ExcelWriter();
        List userList = new ArrayList();
        for(int i=0;i<10;i++){
                User user = new User();
                user.setClickCount(1+i);
                user.setUserAddress("userAddress" + i);
                user.setUserAge(20+i);
                user.setUserLong(new Long(10000)+i);
                user.setUserMount("userMount" + i);
                user.setUserName("userName" + i);
                user.setUserSalary("userSalary" + i);
                userList.add(user);
           }
        try {
            writer.exportExcel(userList); //导出文件
            UserRules ur = new  UserRules();
            writer.exportExcel(userList,ur);
        } catch (InvocationTargetException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (NoSuchMethodException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (InstantiationException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (IllegalAccessException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (WriteException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

    }

    //设置标题
    public void exportExcel(List list,Rules rules) throws IOException, WriteException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
        List[]  rowList =   rules.getRowTitle();
        Label lable = null;
        File file = new File("e:\\mytest\\testjxl3.xls");
        WritableWorkbook workbook  = Workbook.createWorkbook(file);
        WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);
        Map rMap = rules.getRMap(); //得到字段信息
        //处理标题
        int i=0; //记录行数
        for(;i<rowList.length;i++){
             List row = rowList[i];
            for(int cop=0, j=0;j<row.size();cop++,j++){ //得到每列标题的信息 包括跨行和跨列的信息
                String [] title = (String[]) row.get(j);
                String ctitle = title[0];
                lable = new Label(cop,i,ctitle);
                sheet.addCell(lable);
                int r = Integer.parseInt(title[1]);
                int c = Integer.parseInt(title[2]) ;
                if( r != 0 || c != 0){ //合并单元格
                   sheet.mergeCells(cop,i,cop+c,r+i);
                    cop += c;
                }
            }
        }
       //处理要导出的数据
       List cols = rowList[rowList.length-1]; //得到要导出的列的信息
       int rowCount = list.size() + rowList.length; //总行数
       if( list != null && list.size()>0){
           for(int n=0;n<list.size();n++){
                Map objectMap = CommunUtil.getMap( list.get(n)); //将对象转换成 == Map
                for(int k=0;k<rMap.size();k++){
                    Object   key   =  rMap.get(new Integer(k));
                    String  columnValue =  (objectMap.get(key)+"").trim();
                    lable = new Label(k,n+rowList.length,columnValue);
                    sheet.addCell(lable);
                }
           }
       }
       workbook.write();
       workbook.close();


    }

    public void exportExcel(List list) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
               File file = new File("e:\\mytest\\testjxl2.xls");
               try {
                   System.out.println("=======开始============");
                   WritableWorkbook workbook  = Workbook.createWorkbook(file);
                   WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);

                   //一些临时变量,用于写到excel中
                   Label l = null;
                   jxl.write.Number n = null;
                   jxl.write.DateTime d = null;

                  //预定义的一些字体和格式,同一个Excel中最好不要有太多格式
                   WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD,
                           false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
                   WritableCellFormat headerFormat = new WritableCellFormat(headerFont);

                   WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
                           false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
                   WritableCellFormat titleFormat = new WritableCellFormat(titleFont);

                   WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
                           false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
                   WritableCellFormat detFormat = new WritableCellFormat(detFont);

                   NumberFormat nf = new NumberFormat("0.00000"); //用于Number的格式
                   WritableCellFormat priceFormat = new WritableCellFormat(detFont, nf);

                   DateFormat df = new DateFormat("yyyy-MM-dd");//用于日期的
                   WritableCellFormat dateFormat = new WritableCellFormat(detFont, df);

                   //设置标题
                   l = new Label(0, 0, "指标", headerFormat);
                   sheet.addCell(l);
                   sheet.mergeCells(0, 0, 0, 1); //合并0到3列 0到0行  4个参数是 c,r,c,r

                   l = new Label(1,0,"总用户", headerFormat);
                   sheet.addCell(l);
                   sheet.mergeCells(1, 0, 2, 0);

                    l = new Label(3,0,"ADSL绑定用户", headerFormat);
                    sheet.addCell(l);
                    sheet.mergeCells(3, 0, 4, 0);

                    l = new Label(5,0,"互联星空用户", headerFormat);
                    sheet.addCell(l);
                    sheet.mergeCells(5, 0, 6, 0);


                    //跨列后 列索引从跨的那行开始
                    l = new Label(1, 1, "访问量", headerFormat);
                    sheet.addCell(l);

                    l = new Label(2, 1, "点击量", headerFormat);
                    sheet.addCell(l);

                    l = new Label(3, 1, "访问量", headerFormat);
                    sheet.addCell(l);

                    l = new Label(4, 1, "点击量", headerFormat);
                    sheet.addCell(l);

                    l = new Label(5, 1, "访问量", headerFormat);
                    sheet.addCell(l);

                    l = new Label(6, 1, "点击量", headerFormat);
                    sheet.addCell(l);



                    if(list != null && list.size()>0){
                        for(int i=0;i<list.size();i++){
                          Map objectMap = CommunUtil.getMap( list.get(i)); //将对象转换成 == Map
                             int j=0;//列从第一列开始
                             for(Object o : objectMap.keySet()){
                                //String key = (String) o;
                                 String pvalue =  objectMap.get(o)+"".trim();
                                 //System.out.println("pvalue== " + pvalue);
                                 //System.out.println("userValue"+i+"   "+o+"   " + objectMap.get(o));
                                 Label  lb = new Label(j,i+2,pvalue);
                                 sheet.addCell(lb);
                                 j++;
                             }
                       }
                    }

                   workbook.write();
                   workbook.close();
                  System.out.println("====================结束=====================");

               } catch (IOException e) {
                   e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
               } catch (RowsExceededException e) {
                   e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
               } catch (WriteException e) {
                   e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
               }

    }
}


下面是整个工程   我是用idea做的  可能和eclipse有冲突。。
  • jxl.jar (430.4 KB)
  • 下载次数: 34
0
0
分享到:
评论

相关推荐

    jxl导出excel 完整例子工程

    jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程

    jxl导出excel加水印.zip

    通过以上步骤,我们就可以使用`jxl`库成功地导出包含水印的Excel文件了。需要注意的是,由于Excel文件的特性,水印可能不会在每个单元格都完全可见,可能需要调整字体大小、透明度等参数以达到理想效果。同时,如果...

    jxl导出excel文件简单示例

    标题中的“jxl导出excel文件简单示例”是指使用jxl库来创建和导出Excel文件的一个基本操作。jxl是一个Java库,它允许开发者读取、写入和修改Excel文件,尤其在处理批量数据时非常方便。在这个示例中,我们将探讨如何...

    jxl导出excel工具类

    `jxl`库是一个广泛使用的开源库,它允许开发者方便地读取和写入Microsoft Excel文件。本文将详细介绍如何使用`jxl`库创建一个导出Excel的工具类,以及这个工具类如何帮助我们简化代码,提高效率。 首先,`jxl`库...

    使用jxl导出Excel表的好例子

    `jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Microsoft Excel文件。本篇文章将深入探讨如何利用`jxl`库来创建和导出Excel表格。 首先,我们需要在项目中引入`jxl`库。如果你的项目是Maven项目,...

    jxl导出excel总结

    jxl库正是解决这一问题的关键,它允许Java程序创建、读取和修改Excel文件,极大地拓展了Java在数据处理上的能力。 jxl库是由JExcelAPI项目提供的,它是一个开源的Java库,专门用于处理Microsoft Excel文件。在本文...

    java jxl导出excel文件.txt

    根据提供的文件信息,我们可以总结并深入探讨以下几个与...以上是关于如何使用Java JXL库导出Excel文件的详细介绍,涵盖了从环境准备到具体实现步骤的全过程。希望这些知识点能够帮助您更好地理解和应用Java JXL库。

    java使用jxl打印excel报表文件

    JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...

    JXL导出excel的示例及文档

    通过学习JXL API文档和示例,开发者可以轻松地在Java项目中处理Excel文件,无论是读取数据、分析报表还是生成自定义的Excel文件,JXL都提供了一个强大且易于使用的工具集。对于需要处理Excel的Java开发者来说,熟悉...

    jxl操作excel文件例子

    标题“jxl操作excel文件例子”指的是利用JXL库进行Excel文件处理的实际应用。描述中提到的“通过jxl操作excel,简单方便”,暗示了JXL库的一个关键优点——简洁易用的API,使得对Excel文件的操作变得相当直观。 JXL...

    Android-Android使用jxl快速导出excel表

    总之,使用jxl库在Android上快速导出Excel表格需要理解jxl的API,处理Android特有的文件操作和线程管理,以及适当地设置单元格内容和样式。通过实践和参考示例项目,你将能够有效地实现这一功能。

    JXL读写Excel小例子

    在Java编程环境中,处理Excel文件是一项常见的任务,而JXL库提供了一个简洁的API来实现这一功能。JXL是一个开源的Java库,专门用于读取和写入Microsoft Excel文件(.xls格式)。在这个"JXL读写Excel小例子"中,我们...

    jxl导出excel

    标题中的“jxl导出excel”指的是使用JExcelApi(简称jxl)库来生成和导出Microsoft Excel格式的文件。JExcelApi是一个开源Java库,允许开发者在Java应用程序中读取、写入和修改Excel文件。这个工具类在处理大量数据...

    jxl导出Excel基础

    jxl导出Excel基础,非常有用的一个东西,漫漫看

    jxl导入导出excel

    在Java编程环境中,JXL库是一个非常流行的工具,用于读取和写入Excel文件。它提供了简单易用的API,使得开发者能够方便地处理Excel数据,而无需依赖Microsoft Office套件。本文将深入探讨如何使用JXL进行Excel的导入...

    jxl实现导出excel数据

    JXL库是一个广泛使用的开源库,它提供了方便的方式来读取、写入和操作Excel文件。下面我们将深入探讨如何使用JXL库实现导出Excel数据。 首先,你需要在你的项目中引入JXL库。可以通过Maven或Gradle来添加依赖,如果...

    jxl 导出 excel

    在Java编程环境中,JXL库是一个非常流行...总之,使用JXL库在Java中导出Excel文件是一项常见的任务,尤其在数据分析和报表生成场景下。通过熟悉JXL的API,你可以轻松地定制化Excel文件的格式和内容,满足各种业务需求。

    JXL导出Excel数据表

    JXL库是一个Java库,专门用于读写Microsoft Excel文件,它为开发者提供了一种便捷的方式来处理Excel数据,无需依赖Microsoft Office。本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

Global site tag (gtag.js) - Google Analytics