最简单的jxl导出Excel方法

时间:2021-11-17 09:18:11

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的办法,欢迎留言指教啦!!