页面树结构
转至元数据结尾
转至元数据起始

(本文档仅供参考)

需求描述

集团目前有月度任务采购计划,要求默认展示当月创建的所有任务,计划开始时间、结束时间,实际开始时间和结束时间,跟甘特图有点类似。

展示效果

实现思路

通过Excel的条件规则对符合日期范围内的日期进行单元格颜色填充。

实现步骤

一、数据集准备

随着月份不同天数也会出现28、 29、30、31天不等,因此需要通过编写sql获取不同月份的每一天,用于横向扩展处对应的日期。

如以下基于MySQL数据库的sql示例,不同数据库类型需自行调整SQL。

/*mysql.help_topic  是MySQL的一个内置表,内置了600多条数据
其中存在一个整形的序号字段 help_topic_id  借助此字段处理成当前月的每一天数据
如,10月有31条数据,11月有30条数据*/

select * from (
select
    date_sub(
        curdate(),
        interval(cast(help_topic_id as signed integer)) day
    ) as dates,
    year(
        date_sub(
            curdate(),
            interval(cast(help_topic_id as signed integer)) day
        )
    ) year,
    month(
        date_sub(
            curdate(),
            interval(cast(help_topic_id as signed integer)) day
        )
    ) month,
    day(
        date_sub(
            curdate(),
            interval(cast(help_topic_id as signed integer)) day
        )
    ) day
from
    mysql.help_topic
where
    help_topic_id < day(curdate())
union all
select
    date_add(
        curdate(),
        interval(cast(help_topic_id as signed integer)+1 ) day
    ) as dates,
    year(
        date_add(
            curdate(),
            interval(cast(help_topic_id as signed integer)+1 ) day
        )
    ) year,
    month(
        date_add(
            curdate(),
            interval(cast(help_topic_id as signed integer)+1 ) day
        )
    ) month,
    day(
        date_add(
            curdate(),
            interval(cast(help_topic_id as signed integer)+1 ) day
        )
    ) day
from
    mysql.help_topic
where
    help_topic_id < day(last_day(curdate())) - day(curdate())
    ) t order by dates

查询结果如下:


二、报表设计

1、单元格字段拖拽和公式如下:

E5:=DAY(C5)

E6:=DAY(C6)

F5:=DAY(D5)

F6:=DAY(D6)

G5:=IF(AND(G4>=E5,G4<=F5),1,"")

G6:=IF(AND(G4>=E6,G4<=F6),1,"")

2、条件格式设置

G5

G6




  • 无标签