FineReport制作任务日历

news2024/12/26 23:30:08

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

概要

博主接触FineReport帆软报表有一段时间了,正好前几天做了一个任务日历的需求,把每天完成的任务量直观的展示在日历上,方便管理者更好的监控各业务的完成情况,做完后想着和大家分享一下博主的心得体会。项目整体效果如下图所示:
项目效果图

整体架构流程

项目整体使用 FineReport v11.0 里的决策报表和普通报表进行设计,其中报表数据集的编写可能涉及到数据库 SQL 语句,还有在报表中使用的相关函数。

技术名词解释

如果是刚接触帆软报表的同学可以点击下方链接,查看官方文档说明

  • FineReport v11.0
  • 决策报表
  • 数据集

技术细节

  1. 添加模板参数
    添加模板参数
    (1)点击“+”添加三个模板参数 a,b,c,参数名字可以按照大家习惯取,默认值分别设置为公式:FORMAT(TODAY(), "yyyy-MM")FORMAT(MONTHDELTA(TODAY(),1), "yyyy-MM")FORMAT(MONTHDELTA(TODAY(),-1), "yyyy-MM"),点击确定。
    模板参数设置

  2. 打开设计器后,在顶部的导航栏点击"文件"->“新建决策报表(F)”,如下图所示:
    新建决策报表

  3. 随后点击"新建空白模板",如下图所示:
    新建空白模板

  4. 然后在空白模板上方的功能区找到新建Tab块(空白块->Tab块,鼠标放上去按住左键拖到下方空白处),如下图所示:
    新建Tab块

  5. 双击新建好的Tab块页面,进入编辑设计,然后点击上面的"+"添加标题,如下图所示:
    添加标题

  6. 拖动"新建Tab块"的旁边功能按钮为每个Tab块添加"报表块",其它几个Tab块同样的操作,如下图所示:
    为Tab块添加报表块

  7. 双击“报表块”,进入报表设计页面,页面设计参考图如下:
    页面设计参考图
    将不需要显示的行和列进行隐藏后,最后界面如下:
    隐藏不需要的列后的界面设计

  8. 在页面合适位置合并几列单元格用来放年月,然后点击合并后的单元进行如下设置:
    合并单元格放年月

  9. 在年月的左边,我们要设置点击切换到上月的链接,切换下月同理,如图所示:
    切换到上一月

  10. 点击编辑进行”条件属性“设置,其中”背景“设置为图片:
    设置链接为图片显示

  11. “超级链接类型"设置为"动态参数”:
    超级链接动态参数设置

参数
a$c
cFORMAT(MONTHDELTA($c+“-”+“01”,-1), “yyyy-MM”)
bFORMAT(MONTHDELTA($c+“-”+“01”,1), “yyyy-MM”)

右边单元格的超级链接设置同理,只不过将参数值改成下表:

参数
a$b
bFORMAT(MONTHDELTA($b+“-”+“01”,1), “yyyy-MM”)
cFORMAT(MONTHDELTA($b+“-”+“01”,-1), “yyyy-MM”)
  1. 在星期的上面添加一行,其中B4单元格插入公式:DAY(DATEINMONTH((E2 + "-01"), -1))
    获取当月日期数
    右边放上周几对应的数字,方便计算日期:
    插入周几的数字

  2. C7单元格插入公式:IF(WEEKDAY(E2 + "-01") = 1, 1, ""),这里的主要目的是根据当前月的1日是不是周一,是的话就显示“1”,不是则显示为空。
    判断当月1日为周几
    D7单元格插入公式:IF(LEN(C7) <> 0, C7 + 1, IF(WEEKDAY(E2 + "-01") = 2, 1, "")),目的同上。
    E7单元格插入公式:IF(LEN(D7) <> 0, D7 + 1, IF(WEEKDAY(E2 + "-01") = 3, 1, "")),目的同上。
    F7单元格插入公式:IF(LEN(E7) <> 0, E7 + 1, IF(WEEKDAY(E2 + "-01") = 4, 1, "")),目的同上。
    G7单元格插入公式:IF(LEN(F7) <> 0, F7 + 1, IF(WEEKDAY(E2 + "-01") = 5, 1, "")),目的同上。
    H7单元格插入公式:IF(LEN(G7) <> 0, G7 + 1, IF(WEEKDAY(E2 + "-01") = 6, 1, "")),目的同上。
    I7单元格插入公式:IF(LEN(H7) <> 0, H7 + 1, IF(WEEKDAY(E2 + "-01") = 0, 1, "")),目的同上。

  3. 下面C8单元格插入公式:format(IF(LEN(C7) = 0, "", eval("E" + "2") + "-" + C7), "yyyy-MM-dd"),目的是计算C7对应的日期,因为下面任务计划全部要根据这个日期进行数据查询。
    计算对应的日期数
    D8单元格插入公式:format(IF(LEN(D7) = 0, "", eval("E" + "2") + "-" + D7), "yyyy-MM-dd"),目的同上。
    E8单元格插入公式:format(IF(LEN(E7) = 0, "", eval("E" + "2") + "-" + E7), "yyyy-MM-dd"),目的同上。
    F8单元格插入公式:format(IF(LEN(F7) = 0, "", eval("E" + "2") + "-" + F7), "yyyy-MM-dd"),目的同上。
    G8单元格插入公式:format(IF(LEN(G7) = 0, "", eval("E" + "2") + "-" + G7), "yyyy-MM-dd"),目的同上。
    H8单元格插入公式:format(IF(LEN(H7) = 0, "", eval("E" + "2") + "-" + H7), "yyyy-MM-dd"),目的同上。
    I8单元格插入公式:format(IF(LEN(I7) = 0, "", eval("E" + "2") + "-" + I7), "yyyy-MM-dd"),目的同上。

  4. 然后最关键的来了,添加你想要监控的任务指标,通过查询数据集结果,然后设置单元格属性和过滤条件(这里C9、C10、C11的过滤日期根据上面C8的值进行对应),目的让该单元格只显示当前日期的任务。其它的同理。
    关键步骤

  5. 下面C12单元格插入公式:eval("I" + "7") + C4,目的是根据根据上一行的周日日期加上对应的时间间隔来计算这个日期。后面同理。
    计算日期

  6. 关键点来了,C27格开始,我们就要判断日期是否结束了,插入公式:IF((eval("I" + "22") + C4) > eval("B" + "4"), "", (eval("I" + "22") + C4)),其中C4单元格插入公式为:DAY(DATEINMONTH((E2 + "-01"), -1))。后面的同理。

  7. 最后,给每个日期单元格增加一个条件属性,添加一个背景属性,其作用是当前日期显示颜色背景,然后公式条件如下:FORMAT(E2 + "-" + $$$, "yyyy-MM-dd") = format(TODAY(), "yyyy-MM-dd")。其它单元格同理。
    日期添加背景

小结

提示:这里可以添加总结

例如:

提供先进的推理,复杂的指令,更多的创造力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的&#xff1a; category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]

你所瞧不上的东西正以另外一种方式kill you

简单的例子就是&#xff1a; 360se & 360ee的份额比你想象中的大. 360se浏览器&#xff0c;安全浏览器 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 Safari/537.36 360ee浏览器&#xff0c;极速浏览器 n…

摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)

计算机视觉 Camera-如何控制摄像头的输出尺寸&#xff08;分辨率&#xff09; 摄像头工程师说 Camera-如何控制摄像头的输出尺寸&#xff08;分辨率&#xff09;windowingCroppingSkip/SubsampleScaleBinning总结 摄像头工程师说 Camera-如何控制摄像头的输出尺寸&#xff08;分…

Google Chrome的新“IP保护”功能将隐藏用户的IP地址

导语&#xff1a;在保护用户隐私方面&#xff0c;Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址&#xff0c;这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后&#xff0c;Google希望在确保用户隐私的同时&#x…

《 汇编语言的系统学习》一、编程语言、机器语言与汇编语言

目录 《 汇编语言的系统学习》1、编程语言1.1 语言1.2 程序 2 编程语言分类2.1 机器语言2.2 汇编语言2.3 高级程序语言2.3.1 编译型2.3.1 解释型 《 汇编语言的系统学习》 1、编程语言 1.1 语言 定义&#xff1a;一种系统的&#xff0c;人与人之间通过声音、符号等进行交流的…

Qwt-QwtPlot类详解

1.概述 QwtPlot类是Qwt库中最重要的类之一&#xff0c;用于创建和管理绘图窗口。 QwtPlot类具有以下主要功能&#xff1a; 提供一个绘图窗口&#xff0c;可以在其中绘制简单或复杂的二维数据图。支持多种类型的图表&#xff0c;包括曲线图、柱状图、散点图等。能够自定义图表…

第一章: LangChain 生成与加载知识库并根据匹配内容回答问题

LangChain——让文本大模型更加智能化系列文章目录 第一章 langchain生成与加载向量库并根据匹配内容回答问题 文章目录 LangChain——让文本大模型更加智能化系列文章目录前言文章简介一、使用步骤1.引入库2.LLM加载3.数据加载4.数据切分与转换向量5.构建prompt5.查询知识库并…

进程的优先级与LAMP项目部署实战

一、进程的优先级&#xff08;扩展&#xff09; 1、什么是进程的优先级 Linux是一个多用户、多任务的操作系统&#xff0c;系统中通常运行着非常多的进程。哪些进程先运行&#xff0c;哪些进程后运行&#xff0c;就由进程优先级来控制 思考&#xff1a;什么时候需要用到进程…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么&#xff1f; 二、具体实现 1.顺序表的定义 2.初始化ListInitiate&#xff08;L&#xff09; 3.求当前元素个数ListLength&#xff08;L&#xff09; 4.插入元素ListInsert&#xff08;L&…

js 导出文字到txt文件

简介&#xff1a; js 导出文字到txt文件 效果展示&#xff1a; 代码示例&#xff1a; /*** 导出文字到txt文件* param filename* param text*/ function exportToTxt(filename, text) {if (filename undefined) {filename "example-";}if (text undefined) {tex…

【IDEA配置】IDEA配置

参考视频&#xff1a;【idea必知必会】优化设置 告别卡顿 1. 显示内存 右击底下空白区域&#xff0c;出现memory indicator内存指示器&#xff0c;点击勾选即可显示。有的是在Settings->Appearance->Window Options里&#xff0c;如图所示&#xff1a; 2. 内存设置 …

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验

傻瓜式调用阿里云的接口进行三要素&#xff08;姓名、手机号和身份证号&#xff09;校验 一、准备1、购买阿里云的三要素核验套餐包2、申请开通三要素一致性核验3、查看AccessKey 二、调用三要素核验接口1、查看接口文档2、查看阿里云的调用示例3、阿里云完整示例代码4、改造后…

高级深入--day39

(实战项目三)新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类、小类、小类里的子链接&#xff0c;以及子链接页面的新闻内容。 效果演示图&#xff1a; items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8")class SinaItem(scrapy.I…

STM32Cube高效开发教程<基础篇>(七)----基础定时器

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、 概述 STM…

new Vue() 发生了什么?

目录 前言 用法 代码和效果图 效果图 理解 高质量的使用 前言 Vue.js是一个流行的JavaScript前端框架&#xff0c;用于构建单页面应用&#xff08;SPA&#xff09;和用户界面。当我们使用new Vue()来创建一个Vue实例时&#xff0c;Vue会执行一系列的初始化过程&#xff0…

Tomcat 和 HTTP 协议

目 录 HTTP 协议HTTP 是什么理解 HTTP 协议的工作过程抓包结果HTTP请求HTTP响应 HTTP 请求 (Request)认识 URL认识 "方法" (method)认识请求 "报头"&#xff08;header&#xff09;认识请求 "正文" (body) HTTP 响应认识 "状态码" (st…

NFS性能瓶颈分析

前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…

Redis数据类型——list类型数据的扩展操作

1.list阻塞式数据获取 2.list类型数据业务场景

基于蜻蜓算法的无人机航迹规划-附代码

基于蜻蜓算法的无人机航迹规划 文章目录 基于蜻蜓算法的无人机航迹规划1.蜻蜓搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用蜻蜓算法来优化无人机航迹规划。 1.蜻蜓搜索算法 …