从表像上来看,NameEditor编辑栏位某个table属性为空,只有一个可能就是Editor的tableInfo无法提供必须的信息给Gantt Chart客户端。因此很有必要检查服务器的日志。
当服务器日志显示空指针错误,唯一的原因就是数据的问题了。反编译ActivityService类,查看loadSubclassMap的方法体。
很明显,某个subclass的APIName丢失了。由于Service的数据的缓存都来自于数据库的加载,因此我们直接查看数据库数据,检查propertytable即可。很容易就找到了某个SubClass的API属性的确在升级的过程中丢失了。
要制作动态的,可以进行计划与实际对比的甘特图,关键要解决两个问题:
1、计划时间与实际时间分成两行显示,这样才能够让甘特图的进度条也分成两行显示出来,实现计划与实际的对比;
2、使用数据透视表来查询,但是要解决透视表作为图表数据源时,如果发生变化,则图表也会错乱的问题。
下面是制作这种图表的步骤:
第一步、制作一个录入界面,同时用VBA将其保存到另一个作为数据库的表格中:
1、录入界面如下图所示:(注:录入界面中,计划时间与实际时间可以在同一行中。)
2、作为数据库的表格如下图所示:(注:本表需要做成可以方便地生成数据透视表的二维表格,并且,这一步是关键步骤,要在这一步通过VBA把录入界面的数据在此时把计划时间、实际时间分成两行显示。)
第二步、根据数据库生成几个数据透视表,其结构略有不同,自己根据需要进行调整(注:此处要使用OFFSET函数定义好上面数据库表中有效数据的范围。):
数据范围=OFFSET(项目进度数据库!$A$1,,,COUNTA(项目进度数据库!$A:$A),COUNTA(项目进度数据库!$1:$1))
1、单项目查询:
2、多项目查询:
3、各项目汇总查询:(只显示每个工程项目的总时间,不显示明细时间)
第三步、制作一个辅助表,用简单的公式把上述几个数据透视表对应起来,所谓简单,即本sheet中某一格=透视表中某一格,但要注意如果透视表中的空白格,可能会显示为0,所以用IF函数作些调整,如
IF(C1<>"空白",单项目查询!$A$1,""):
到了这一步,制作甘特图所需的数据表格已经基本完成了。接下来要准备好制作甘特图所需的数据源。
第四步、用OFFSET函数把甘特图所需的进度条1、2、3、4,Y座标轴名称(就是在图上显示的工作内容),甘特图的总数据范围定义好:
图表_进度条1 =OFFSET(制图辅助!$C$1,1,1,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1)
图表_进度条2 =OFFSET(制图辅助!$C$1,1,2,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1)
图表_进度条3 =OFFSET(制图辅助!$C$1,1,3,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1)
图表_进度条4 =OFFSET(制图辅助!$C$1,1,4,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1)
图表_进度图Y轴名称 =OFFSET(制图辅助!$C$1,1,-1,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1)
图表_制图辅助范围 =OFFSET(制图辅助!$B$1,,,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白"),6)
第五步、用普通制作甘特图的方法制作出甘特图:
首先,创建图表大概样式。
在图表向导中,选条形图当中的堆积条形图,并按步骤逐步 *** 作,相关需要选定数据范围的地方,输入上面定义好的名称:
至此,进度图的大体样子已经完成如下,
接下来进行调整:
第1步,把坐标日期调整到所需月份,更改字体及数字格式:
右键点X轴坐标,选“坐标轴格式”,作如下 *** 作:
右键点Y轴,选“坐标轴格式”,更改字体,如果勾选“分类次序反转”,可以把日期坐标调到顶部,否则是在底部。
修改后的图如下:
第2步,分别双击图中“计划开始时间”和“实际开始时间”的图形,在d出来的对话框中,把【边框】和【内部】都选为无。
第3步,右键点击右边的图例说明,选“图例格式”,更改字体及放置位置:
再把多余的“计划开始时间”、“实际开始时间”删除。
第4步,在图表区空白地方右键点击,选“图表选项”,在网格线中,把X轴、Y轴的主要网格线都勾上。
至此,一个有计划与实际对比,并且可以根据需要由数据透视表进行筛选的动态的甘特图就完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)