`
xuxin012
  • 浏览: 9102 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JXL制作属于自己的excel导入导出报表工具(一)背景和思路

    博客分类:
  • Java
阅读更多

   从事JAVA开发一年多了,大约有半年都在搞Excel导入导出吧.刚刚交接项目时,还是个对Java有些陌生,有些惧怕的.但是因为人都走光了,项目中只有咱一个开发了,只能担起全部的开发维护责任,也慢慢成长了起来.项目中以前的Excel导出用的JXL,因为客户的特殊需求,导出并非平时那么简单,涉及到分页(每sheet一页),还要将数据合并.架构师写了分页的代码,并写了某个报表的导出类,然后其他工程师CV,即便对于当时没多少经验的我来说,这也很没意思,很不好,但是事已至此,我也就只能随波逐流了.

  直到到某一天,客户提出了由于政策变更要重新制作一套报表的需求,我才意识到问题的严重性,这样一个类一个类的改,不止麻烦,而且要实现客户的那些格式要求(如某列需要加粗,某单元格有上下左边框等等)都十分麻烦,还会大大增加代码复杂度(需要在各种循环里判断),于是萌生了重新构架导出功能的想法.

 

--------------------以上为发泄心情,可以忽略不看--------------------

 

  做java的必然要有面向对象的意识,万物皆为对象,报表亦如此.一个Excel报表,我将其分为七个部分,那就是首页头信息(只出现在第一页),头信息(每页都有),动态信息,尾信息(每页都有),尾页尾信息(只出现在最后一页),统计信息(所有数据之后的那行),页码信息(位置不固定).如下图所示:

             

  参考了hibernate的orm思想,将excel与对象映射起来,但由于早期,并不会写DTD,于是就用某类的静态成员变量来充当配置文件.报表中的动态信息需要用一个集合来表示,集合中的每个对象代表Excel中动态信息的一行,每个成员变量代表Excel中的一个单元格.其他的头尾信息之类,可以用一个对象来表示.下面简要的介绍一下整体思路.

  首先,我们需要准备好模板,用JXL读取模板,并将其sheet复制一份出来,在新的sheet上输出数据,以免影响到模板上的原有数据.之后,当然是根据情况分页,将数据分成几个list,每个list代表一页的数据,然后循环输出,自然循环中的控制变量i就成了页码.对于i为0的时候也就是第一页,要将首页头信息输出,其他的情况下,则要把首页头信息的内容清空(模板上写的那部分).之后输出相应的头信息动态信息尾信息,之后需要判断是否是最后一页,对于最后一页我们需要输出尾页尾信息,其他页我们需要清空模板中的尾页尾信息.这样报表摸板便完成了,不敢说这样可以应对任何报表,但是对于多数报表,我们以后要做的只是配置七大部分的格式,与对象的映射,就足够产生一个xls文件了.

  以下便是核心代码部分的简要的介绍.

   

// 读取模板
     tempBook = Workbook.getWorkbook(new File(inPath), workbookSettings);
     // 创建目标对象
     book = Workbook.createWorkbook(new File(outPath), tempBook);
  WritableSheet copySheet=book.getSheet(0);
  WritableSheet sheet=null;
     //拆分动态数据集
     List[] lists;
     //没有动态数据
     if(report.getDynamic()==null)
     {
      book.copySheet(0,report.getName(), 1);
      sheet=book.getSheet(1);
      //填充静态数据的方法参数3代表对应的输出对象,参数4为包含配置的对象,参数5为相对位置,参数6页码
      fillStaticData(sheet, copySheet, staticData, report.getFirsthead(), 0,1);
     }
     else
     {
      //分页
      lists=paging(dynamicData);
      int position=0;//相对位置
      for(int i=0;i<lists.length;i++)
      {
       position=0;
       book.copySheet(0,report.getName(),i+1);//复制新sheet
       sheet=book.getSheet(i+1);
       if(report.getFirsthead()!=null)//首页
       {
        if(i==0)//输出首页头信息
        {
         position+=fillStaticData(sheet, copySheet,staticData, report.getFirsthead(),0, i); 
        }
        else //清空头信息
        {
         JXXUtil.cutRange(sheet, 0, 0, report.getFirsthead().getRows(), report.getFirsthead().getColumns());
         JXXUtil.blankRange(sheet, 0, 0, report.getFirsthead().getRows(), report.getFirsthead().getColumns());
        }
       }
       //输出头信息
       position+=fillStaticData(sheet, copySheet,staticData, report.getAllhead(),position, i);
       if(report.getDynamic().getStartRow()!=0)
       {
        position=report.getDynamic().getStartRow();
       }
       //写入动态数据
       fillDynamicCell(sheet, copySheet, lists[i], position, report.getDynamic());
       //相对位置的计算
       position+=lists[i].size();
       if(i!=lists.length-1)//末页
       {
        if(report.getLasttail()!=null)
        {
         JXXUtil.cutRange(sheet, position+1, 0,position+1+report.getLasttail().getRows(), report.getLasttail().getColumns());
         JXXUtil.blankRange(sheet,position+1, 0,position+1+report.getLasttail().getRows(), report.getLasttail().getColumns());
        }
       }
       position+=fillStaticData(sheet, copySheet,staticData, report.getAlltail(),position, i);
       if(report.getLasttail()!=null)
       {
        if(i==lists.length-1)//末页
        {
         fillStaticData(sheet, copySheet,staticData, report.getLasttail(),position, i); 
        }
       }
      }
     }
     book.removeSheet(0);
   book.write();
   tempBook.close();
     book.close();

  具体的实现以及JXL处理Excel上的一些困难,以后都会一一介绍,这次就写到这了.

  • 大小: 48 KB
分享到:
评论

相关推荐

    Excel导入导出 jxl及Poi 工具类

    在Java开发中,处理Excel数据是一项常见的任务,无论是读取大量数据进行分析,还是批量导入导出信息。这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入...

    JXL、POI实现Excel导入导出

    在IT行业中,处理Excel数据是一项常见的任务,尤其是在数据分析、报表生成和数据交换等场景下。JXL和Apache POI是两个流行的Java库,专门用于读取、写入和操作Excel文件。下面将详细介绍这两个库以及如何利用它们...

    java使用jxl进行Excel导入导出

    Java 使用 JXL 进行Excel导入导出是一个常见的任务,特别是在数据处理和分析场景中。JXL 是一个 Java 库,允许开发者方便地读取、写入和操作 Excel 文件(.xls 格式)。以下是对这个主题的详细阐述: 1. **JXL 概述...

    jxl 实现excel导入导出

    在Java编程环境中,处理Excel数据是一项常见的任务,无论是读取...总之,`jxl`库是Java开发者处理Excel文件的一个有力工具,它简化了读取、写入和修改Excel数据的过程,使得在Java应用中集成Excel功能变得更加便捷。

    jxl.jar包(java导入导出Excel文件)

    在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...

    Jxl实现Excel的导入导出

    使用Jxl对Excel进行导入导出,其中包含设置单元格样式以及数据有效性。

    jxl资源包,用于Excel导入导出

    《jxl资源包:高效Excel导入导出的利器》 在IT行业中,处理数据往往是一项繁琐的任务,尤其是在数据量庞大的情况下。此时,高效的数据导入导出工具显得尤为重要。"jxl资源包"正是这样一个专为Java开发者设计的库,...

    jxl导入导出excel

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

    jxl 实现 excel的导入和 导出

    在Java编程环境中,处理Excel数据是一项常见的任务,而`jxl`库则为开发者提供了方便的接口来实现Excel文件的导入和导出。`jxl`是一个开源的Java库,它允许用户读取、写入和修改Excel文件,无需依赖Microsoft Excel...

    jxl导出excel工具类

    在Java编程领域,导出Excel数据是一项常见的任务,特别是在数据处理和报表生成中。`jxl`库是一个广泛使用的开源库,它允许开发者方便地读取和写入Microsoft Excel文件。本文将详细介绍如何使用`jxl`库创建一个导出...

    apache以及jxl对excel的导入导出

    Apache POI与JXL:Excel导入导出的深入解析 在Java编程中,处理Microsoft Excel文件是一项常见的任务,Apache POI和JXL是两个广泛使用的库,分别提供了强大的功能来读取、写入和操作Excel文件。这两个库使得开发者...

    jxl报表导入导出

    总之,"jxl报表导入导出"是一个实用的Java工具,通过jxl库,开发者可以高效地处理Excel文件,实现数据的导入和导出。这个功能对于那些需要与Excel文件交互的项目来说是非常有价值的,特别是数据分析、报表生成和数据...

    使用JXL和POI实现EXCEL的导入和导出及DTREE的使用

    本资源主要讲解了如何利用JXL和Apache POI这两个库来实现Excel的导入与导出,并介绍了DTREE(决策树)的使用。 JXL是一个广泛使用的Java库,它提供了读写Microsoft Excel文件的能力,支持多种格式,如.xls。使用JXL...

    java_Jxl(导入导出Excel)

    java_Jxl(导入导出Excel) 导入导出Excel的jar包,与大家共同分享,互相学习

    java使用JXL导入导出excel

    Java使用JXL库进行Excel导入导出是一种常见的技术实践,特别是在需要在Java应用程序或Web应用中处理Excel数据时。JXL是一个轻量级的库,它允许开发人员以纯Java方式读取、创建和修改Excel文件,而无需依赖于Windows...

    jxl包-JAVA轻松处理EXCEL导入及导出

    在Java编程环境中,处理Excel文件是一项常见的任务,无论是读取数据、分析数据还是生成报告,Excel都是一个便捷的工具。jxl库就是专门为Java开发者设计的,用于方便地读写Excel文件。本篇文章将深入探讨jxl包在JAVA...

    java实现excel导入导出.pdf

    在 Java 中,实现 Excel 导入导出可以使用多种方式,本文将介绍使用 JXL 和 POI 两个库实现 Excel 导入导出的方法。 使用 JXL 库实现 Excel 导入导出 JXL(Java Excel API)是一个开源的 Java 库,用于读写 Excel ...

    jxl导出excel加水印.zip

    在Java编程环境中,我们经常需要处理数据的导入和导出,Excel作为一种常见的数据存储和展示格式,被广泛应用。`jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库...

    java_jxl导入导出

    综上所述,Java JXL库是Java开发者处理Excel文件的强大工具,尤其在数据导入导出、报表生成等场景下,其简洁的API和丰富的功能使其成为不可或缺的选择。然而,对于需要处理.xlsx格式的新版Excel文件,开发者可能需要...

Global site tag (gtag.js) - Google Analytics