使用jxl生成带动态折线图的excel

        每一个java屌丝程序员都应该了解,jxl可以向excel单元格中添加数据,但是可以生成非常常用的折线表(通俗一点就是屌丝小学时候学的有x轴y轴,还有各种坐标点连接成的线)?查看jxl帮助文档后可能又让众屌丝失望了,jxl无法生成动态折线图,但是没关系,此路不通开彼路。下面就像大家介绍一下如何生成excel折现表——模板方法。所谓模板方法是首先在office工具中生成折线图,然后根据表格中的数据生成折线图。

 

       生成excel折线表分为两种情况,第一种:格式固定,数据变动。第二种:格式变动,数据亦变动。

       废话不多说,先介绍第一种。想了解此方法之前须对microsoft excel 如何使用表格中的数据生成折线图。

如图一组数据

                                                       

然后在excel做如下操作:

                         

最后选择生成的折线图点击右键->选择数据->鼠标选择数据区域然后确定,折线图出来了:

                        

 

说到这里聪明的小屌丝应该了解了第一种方法:格式固定,数据变动。图形生成以后我们只要用jxl对表格中的数据进行改动,就可以获取我们想要的折线图。

    下面讲解第二种情况:第一种:格式变动,数据变动。这种情况经常看到,是重点也是难点,本屌整理了几处网上仅有资料,终于搞懂了。

格式变动即要用于生成折线图的数据的行和列都是变动的,这里的变动包括行数或列数的变动(反应到折线图上就是坐标点个数的增减)以及表格数据的变动。这里就有必要引入excel中的一个概念——名称。如果不想了解那么详细的话就听本屌一句话:所谓名称就是在excel中存在的类似于java变量的一个东西,execel变量当然就是表格中的数据,特别之处是名称不仅可以代表一个表格,还可以代表一个表格域。详细了解请访问:http://wenku.baidu.com/view/04842a03cc17552707220884.html

举例说明一下:如下图

                    

随着月份的增加789···月份的利润数据也会获取,这是就需要使用名称,在excel中点击公式选项卡——>名称管理器——>新建名称,无图无真相:

                   

新建名称 month=OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,1)

     profit==OFFSET(Sheet1!$B$1,1,0,COUNTA(Sheet1!$B:$B)-1,1)

如右图:            

 

其中不得不解释一下offset(o1,o2,o3,o4,o5)和counta(c)

    o1  可以看成一个标准点,后面四个变量都是建立在此标准点的对比数据

    o2  如 5 表示在标准点一下第五个的位置

    o3  如 5 表示在标准点右边第五个位置

    o4  如 5 结合o1 o2 o3 三个函数生成的点,往下横跨5行。

    o5  如 5 结合 o1 o2 o3 三个函数生成的点,往右边跨5行。

    对于counta函数 是计数c代表的一个区域非空的数量。屌丝们可以测试一下在一个单元格中输入 “=Counta(A1:A5)” 确定之后就表示从A1到A5不为空的单元格的数量

 

下面继续讲解:插入一个折线图。右键选择数据->添加->确定->右侧编辑如下图(b.xls为excel文件名)

          

      此处是使用第一列的数据作为x轴坐标数据。

      接下来确定y轴数据

      点击左侧编辑,you say dick without a pic:

               

确定之后奇迹发生,折线图形成,试着在数据下方再加一组数据,当然在实际应用中这种数据是通过jxl加进去的,不只是这个数据,上面给出的所有数据都是通过jxl加进去的。Pic:

                

折线图变化,说明Success!congratulations!最终图:

 

              

 

嫌太单调? 邮件-》设置图标区域格式-》填充一下 pic:

            

    

    另外除了对于第二种情况,还有一种解决方法,同样要定义名称,但名称的初始化在程序中使用jxl函数进行,这里本屌只做抛砖引玉:

        使用到的函数为:WritableWorkBook中的 addNameArea(name,sheet,x,y,width,height);

    有兴趣的大神可以看一下。

                  

    

posted @ 2013-03-12 14:39  panlovestan  阅读(2002)  评论(2编辑  收藏  举报