(本文档仅供参考)
需求描述
集团目前有月度任务采购计划,要求默认展示当月创建的所有任务,计划开始时间、结束时间,实际开始时间和结束时间,跟甘特图有点类似。

展示效果

实现思路
通过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
