zoukankan      html  css  js  c++  java
  • 最简单的jxl导出Excel方法

    jxl导出Excel的方法有很多,但是基本上不能够做到简便灵活,如,只写一个方法就可以实现所有需要导出的数据。除非使用方法反射机制,把对象所有的getxxx()方法遍历出来,取得它返回的值,但是得到的方法数组是无序的。代码如下:

    for(int j=0;j<list.size();j++){
                        Object object = list.get(j);
                        Class class1 = object.getClass();
    //方法数组是无序的,这样取出的值就不能够保证与Excel标题一一对应 Method[] methods
    = class1.getMethods(); //遍历对象的所有方法 int count = 0; for(int k=0;k<methods.length;k++){ Method method = methods[k]; String methodName = method.getName(); // 只处理getXXX方法 if(methodName.startsWith("get")&&!methodName.equals("getClass")){ System.out.println("方法的名字="+methodName); // 调用该方法,invoke方法参数一obj表示对象实例,参数二为该方法的实参,getXXX方法没有参数,故为null,returnValue为getXXX方法的返回值 Object returnValue = method.invoke(object, null); System.out.println(returnValue); String cell = (returnValue==null)?"":returnValue.toString(); Label label = new Label(count, j+2, cell); sheet.addCell(label); sheet.setColumnView(k,25);//设置单元格的宽度 count++; }

    这种方法,如果要让方法有序排序还得另外写方法,麻烦。所以打算采用第二种方式:

    public static void proExcel(){
            Student student1 = new Student(1,"wukailing","1100208131",new Date());
            Student student2 = new Student(1,"wukailing","1100208131",new Date());
            Student student3 = new Student(1,"wukailing","1100208131",new Date());
            List<Student> list = new ArrayList<Student>();
            list.add(student1);
            list.add(student2);
            list.add(student3);
            String headers[] = {"学生ID","学生姓名","学号","入学日期"};
            try {
                WritableWorkbook booWorkbook = Workbook.createWorkbook(new File("C:/test2.xls"));
                WritableSheet sheet = booWorkbook.createSheet("测试用的数据", 0);
                //添加标题标题
                for(int i=0;i<headers.length;i++){
                    sheet.addCell(new Label(i, 0, headers[i]));
                }
                //填充单元格的内容:注意:自己必须清楚知道每一行的每一个单元格的数据类型
                for(int j=0;j<list.size();j++){
                    Student student = (Student)list.get(j);
                    sheet.addCell(new jxl.write.Number (0,j+1,student.getId()));
                    sheet.addCell(new Label(1,j+1,student.getNo()));
                    sheet.addCell(new Label(2,j+1,student.getName()));
                    jxl.write.DateTime labelDT = new jxl.write.DateTime(3, j+1, student.getDate());
                    sheet.addCell(labelDT);
                }
                //写数据、关闭
                booWorkbook.write();
                booWorkbook.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }

    种方法非常的简单,缺点就是如果有很多类对象的数据需要导出,我们就得要写很多个方法,没办法了,本人能力有限,只能采用这种方法。

    如果在浏览器中导出Excel表,还需要在方法的前面加上下面几句:

            WritableWorkbook book = null;
    // 通过输出流的方法向浏览器输送数据 HttpServletResponse response
    = ServletActionContext.getResponse();
    // // 这个必须写上,可以写在action的Result中即配置文件中,也可以写在导出数据的方法中 response.setContentType(
    "application/x-msdownload");
    // 这里定义了导出Excel文件的文件名称 response.setHeader(
    "Content-Disposition", "attachment;filename=gaiyaedu.xls"); OutputStream out = response.getOutputStream(); // 我们通过输出流来创建一个Workbook,即Excel表 book = Workbook.createWorkbook(out); // 生成名为"学生"的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet("订单表", 0);

    各位有啥更好导出Excel的办法,欢迎留言指教啦!!

  • 相关阅读:
    AngularJS中实现无限级联动菜单
    理解AngularJS生命周期:利用ng-repeat动态解析自定义directive
    denounce函数:Javascript中如何应对高频触发事件
    Javascript中的循环变量声明,到底应该放在哪儿?
    优雅的数组降维——Javascript中apply方法的妙用
    如何利⽤360Quake挖掘某授权⼚商边缘站点漏洞
    Java课程设计--网络聊天室
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
  • 原文地址:https://www.cnblogs.com/kailing-con/p/4238236.html
Copyright © 2011-2022 走看看