woyaojiangzhang

news2024/11/18 1:40:59
文章目录
    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

概要

博主接触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/1129628.html

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

相关文章

S32K324 UDS Bootloader开发-需求篇

文章目录 前言内存分配UDS诊断协议需求CAN ID及时间参数UDS诊断服务Bootloader诊断服务APP诊断服务 DID22服务的DID:2E服务的DID:Routine Control DID&#xff1a; 刷写流程预编程主编程后编程 总结 前言 之前做过一个STM32的UDS Bootloader&#xff0c;协议栈主要是NXP官网下…

坦克世界WOT知识图谱之知识图谱篇

文章目录 关于Neo4j1. neo4j安装及配置&#xff1a;2. 确定三元组3. 代码实现结束语 关于Neo4j Neo4j是一个高性能的&#xff0c;NOSQL图形数据库。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎&#xff0c;但是它将结构化数据存储在网络(从数学角度叫做…

UG\NX二次开发 设置视图中心 UF_VIEW_set_center

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 a1794902437 订阅本专栏,非常感谢。 简介 UG\NX二次开发 设置视图中心 UF_VIEW_set_center。如果视图NULL_TAG,则使用工作视图。 效果 代码 #include &qu…

【PointNet—论文笔记分享】

第一个直接基于原始点云数据进行分割、分类的模型&#xff0c;之前都是基于多视图或者体素的方式。 论文: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation代码: TensorFlow版 Pytorch版 基本模型架构&#xff1a; 分别对每个点进行特征提取…

AI大模型基础环境搭建

文章目录 AI大模型基础环境搭建简介下面是搭建大模型基础环境大模型基础环境通常会依赖以下package&#xff1a;conda安装demo环境搭建关于该git项目需要注意的一些点前后端封装 AI大模型基础环境搭建 简介 简单描述一下本文章里会教大家做的东西 1、搭建大模型基础环境 2、f…

JVM相关的面试题

一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗&#xff1f; 六、什么是类加载器&#xff0c;类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…

Day982.各大开放平台是如何使用OAuth 2.0 -OAuth 2.0

各大开放平台是如何使用OAuth 2.0 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于各大开放平台是如何使用OAuth 2.0的内容。 “开放平台”&#xff0c;不难理解&#xff0c;它的作用就是企业把自己的业务能力主要以开放 API 的形式&#xff0c;赋能给外部开发者。而…

C++(Chapter 3)

C(三) 1.引用 1.引用的概念 引用的概念:引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 引用的语法:类型& 引用变量名(对象名) 引用实体 ; 例如: #i…

【OpenGL】七、混合

混合 文章目录 混合混合公式glBlendFunc&#xff08;混合函数&#xff09;glBlendFuncSeparate渲染半透明纹理 参考链接 混合(Blending)通常是实现物体透明度(Transparency)的一种技术 简而言之&#xff1a;混合就是如何将输出颜色和目标缓冲区颜色结合起来。 混合公式 C_fina…

Android 备忘录,记事本程序设计

android备忘录实现&#xff0c;使用ObjectBox数据库框架进行数据存储&#xff0c;增删改查等操作。代码使用kotlin编写。 1、下面看看ObjectBox数据库封装 需要注意的是&#xff1a; /** * 你只有配置好之后, 点击 Make Model 你的model名字, 才会创建 MyObjectBox对象 …

(十七)VBA常用基础知识:读写text文件

读取文件 1.1.数据准备 1.2 代码准备 Sub test()Dim buf As String, n As LongOpen "/Users/sixdog/Documents/VBA/test.txt" For Input As #1Do Until EOF(1)Line Input #1, bufn n 1Sheet1.Range("A" & n) bufLoopClose #1 End Sub1.3 执行结果…

在Unity中如何设置设备的高、中、低配

在开发游戏或应用程序时&#xff0c;考虑到不同设备的性能差异是至关重要的。Unity作为一种流行的游戏开发引擎&#xff0c;提供了一些方法来区分设备的高、中、低配&#xff0c;并相应地调整游戏的性能要求和图形质量。 以下是在Unity中实现这一目标的几种常用方法&#xff1…

【Linux】零基础入门Linux你所需要掌握的

文章目录 目录结构路径描述颜色区分Linux命令文件权限 目录结构 要了解Linux首先,必须要了解linux的目录层级结构,因为在linux中有一切皆文件"的思想. windows系统里面的文件具有各个盘符,如C盘,D盘等 而在Linux中,Linux的目录结构是一个树型结构 Linux没有盘符的概念,只…

程序的编译,链接,执行

目录 1.程序的翻译环境和执行环境 2.翻译环境 3.运行环境 1.程序的翻译环境和执行环境 当我们写出一段代码后&#xff0c;我们需要将代码运行起来。那在这个过程中文件是如何从代码变成可执行程序的呢&#xff1f; 在程序实现过程中中&#xff0c;存在两个环境&#xff1a;一…

Matlab安装必看,手把手教你安装matlab

目录 一 &#xff0c;Matlab介绍 二&#xff0c;安装matlab2021b 一 &#xff0c;Matlab介绍 Matlab是一种高级计算机语言和交互式环境&#xff0c;广泛用于科学、工程、金融和其他领域的数据分析、可视化和数值计算。它是由MathWorks公司开发的&#xff0c;最初发布于1984年…

【unity3D插件】Embedded Browser(ZFBrowser) — 快速实现PC端内嵌网页(有详细图解)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity3D插件—Embedded Browser 这里写自定义目录标题 下载基础知识基础操作使用公网网址加载一个网页①使用公网网址加载一个网页②使用…

IP子网到底怎么划分【全网最详解】!!!

在学习IP子网划分前&#xff0c;首先的明白以下几个基础概念&#xff1a; 1、IP地址组成 IP地址由32位二进制组成&#xff0c;32位二进制分成了4字节&#xff0c;每字节8位&#xff0c;字节之间用符.&#xff08;点&#xff09;分隔&#xff0c;为了方便人们记忆&#xff0c;经…

Leetcode刷题详解——搜索插入位置

1. 题目链接&#xff1a;35. 搜索插入位置 2. 题目描述&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

判断函数是否标记async

判断函数是否标记为async 今天看到这道题觉得蛮有意思的 就是说让你写一个工具类,让后这个工具类接收一个函数,判断这个函数是不是被async标记了 如下,我们先看看普通函数和被async标记的函数打印出来是啥样子 function isAsyncFunction(func) {console.log(func)}isAsyncFun…

css样式中 before、after 里面的 content 乱码

目录 一、问题 二、原因 三、总结 一、问题 1.代码在本地没有问题&#xff0c;打包放在线上在时候&#xff0c;竟然测试测的时候看到element的字体图标有时候显示乱码&#xff0c;如下图1-1所示。更奇葩的是偶现&#xff0c;只有测试看见了&#xff0c;很难复现。。。 图1-…