首页 > 其他分享 >同一个单元格内实现正负进度条显示,且标签不被进度条覆盖

同一个单元格内实现正负进度条显示,且标签不被进度条覆盖

时间:2022-11-10 22:45:41浏览次数:35  
标签:10000 进度条 单元格 score 1% 正负 td

一、实现效果

二、实现思路

假设我们有mysql数据库表temp_namescore,其结构和数据如下:

如果我们要实现上述功能,需要将数据转换成可以在前端页面展现的HTML代码,然后在FR中进行HTML渲染,具体步骤如下:

1、写SQL,根据数据和最大值,获取对应的比例,然后拼接成HTML文件

代码如下:

SELECT NAME
	,score
	,CASE WHEN score / 10000 > 0.01 THEN
		CONCAT( "<table width=50% border=0 cellspacing=0 cellpadding=0 align=right> <tr> <td width=", round( score / 10000, 2 )* 80+ "", "% bgcolor=#1fade5><div style='width:1px'></div></td><td align=left>&nbsp", score + "", "</td> </tr> </table>" ) 
		WHEN score / 10000 >= 0 AND score / 10000 <= 0.01 THEN
			CONCAT( "<table width=50% border=0 cellspacing=0 cellpadding=0 align=right> <tr> <td width=1% bgcolor=#1fade5><div style='width:1px'></div></td><td align=left>&nbsp", score + "", "</td> </tr> </table>" ) 
			WHEN score / 10000 < 0 AND score / 10000 >=- 0.01 THEN
			CONCAT( "<table width=50% border=0 cellspacing=0 cellpadding=0 align=left> <tr> <td align=right>", score + "", "&nbsp</td><td width=1% bgcolor=#ea4431><div style='width:1px'></div></td> </tr> </table>" ) 
			WHEN score / 10000 < 0.01 THEN
			CONCAT( "<table width=50% border=0 cellspacing=0 cellpadding=0 align=left> <tr> <td align=right>", score + "", "&nbsp</td><td width=", round( abs( score )/ 10000, 2 )* 80+ "", "% bgcolor=#ea4431><div style='width:1px'></div></td> </tr> </table>" ) 
		END AS '成绩'
	FROM
		`temp_namescore` 
ORDER BY
	score DESC

代码解释:

  • score/10000 可以得出当前成绩与最高成绩的比例,这个10000可以写死成一个数,也可以提前通过max获取到。

  • 四个when条件分别代表,比例大于1%的,比例大于0小于1%的,比例大于-1%小于0%的,比例小于-1%的。

  • 第一个when条件后面的代码解释如下:

    • <table width=50%> 表示table元素占据整个单元格的一半,这一步是为了方便同一个单元格中正负数对半显示
    • <table align=right> 表示当前的table元素在单元格中居右显示,即下图右侧红框选中的区域
    • <table><tr><tr/><table/> 表示当前table元素中存在且仅存在一行
    • <td width=10% > 表示第一个td占据该行的10%,即下图中绿框选中的区域
    • bgcolor=#1fade5表示进度条的颜色为蓝色,等号后面是色值
    • <td><div style='width:1px'><td> 在td中放入一个宽度为1px的元素,为的是撑起整个td元素
  • 第二个td中包含的内容为数字,其中align=left表示数字标签是贴着前面的进度条居左显示的,其中&nbsp会渲染成一个空格

    • 当数字比例小于1%时默认进度条宽度就占1%,所以会出现<td width=1%>,而不是像第一个一样通过计算得出
  • 第三个when条件后面的代码解释如下:

    • 当数字的比例大于-1%且小于0%时默认进度条宽度就占1%,和整数显示方式一致
  • 第四个when条件后面的代码解释如下:

    • <table align=left>表示负数部分占据单元格的左侧半边
    • 负数和正数不同的是,负数的数字标签是在进度条的左边,所以要先展示标签的td
    • <td align-right>表示标签的td是居右显示紧贴其右侧的进度条

2、将数据集的字段放到对应单元格中,其中进度条的单元格需要宽一些

3、配置进度条的单元格,将其设置为不自动调整,且显示内容设置为用HTML显示内容

标签:10000,进度条,单元格,score,1%,正负,td
From: https://www.cnblogs.com/weibw162/p/16879032.html

相关文章

  • Excel2016、2019移动单元格卡顿的解决方法
    选择excel导航栏的文件,选择选项。选择选项里面的高级,在显示下面找到禁用硬件图像加速,......
  • iOS快速实现环形渐变进度条
    前言进度条相信我们大家都不陌生,往往我们很多时候需要使用到圆形进度条。这篇文章给大家分享了利用ios如何快速实现环形进度条,下面来一起看看。一:先制作一个不带颜色渐变的......
  • Yolov3-v5正负样本匹配机制
    ​ 本文来自公众号“AI大道理”。​什么是正负样本?正负样本是在训练过程中计算损失用的,而在预测过程和验证过程是没有这个概念的。正样本并不是手动标注的GT。正负......
  • 盘点一个Python处理Excel两列单元格中有类似字符串就返回1,没有就返回0的操作
    大家好,我是Python进阶者。一、前言前几天在才哥的Python交流群遇到了一个粉丝提问,提问截图如下:觉得还挺有意思的,都是Pandas基础操作,这里拿出来给大家一起分享下。二、......
  • 编辑DataGridView某个单元格
    编辑DataGridView某个单元格首先让某列的​​ReadOnly​​​属性为​​false​​​。然后在DataGridView的​​CellBeginEdit​​事件中添加类似这样的代码//某列的行头内容......
  • AS3.0 倒计时+进度条
    packagecom{importflash.display.MovieClip;importflash.utils.Timer;importflash.events.TimerEvent;importflash.text.TextField;publi......
  • python 合并单元格
    使用openpyxlfromopenpyxl.workbookimportWorkbookwb=Workbook()ws=wb.activews.merge_cells('A1:B1')wb.save(path_dst)wb.close() ......
  • 表格WPS进度条效果分享
    显示效果1,直接使用公式:(可使用txt替换B2和C2)=IF(DATEDIF(B2,TODAY(),"d")/IF(DATEDIF(B2,C2,"d")=0,DATEDIF(B2,TODAY(),"d"),DATEDIF(B2,C2,"d"))>0,REPT("█",(IF(D......
  • Ant Design Vue自定义文件上传设置progress进度条
    前言在使用AntDesignVue的upload文件上传功能的时候,我们为了规范前端代码,所以会封装接口请求到对应的ts或js文件并引用,这个时候我们会更多的使用自定义文件上传的功......
  • 8,批量处理单元格判断数据,分数筛选
    #批量处理单元格判断数据,分数筛选function分数筛选(){ varArr1=[]; varArr2=Range("a2:b13").Value(); for(vararofArr2){ if(ar[1]>=100){ Arr1.push(a......