永洪社区

标题: 表格组件,过滤器相关 [打印本页]

作者: 天道酬勤    时间: 2021-10-19 11:41
标题: 表格组件,过滤器相关
要求是:河北南网 全省排名前十的单位 每个月各个指标的得分情况,只展示得分率不是100% 的 使用的组件是 表格组件
因为数据表中存放的是整个河北南网每月各指标的数据,为方便测试写的SQL
  SELECT * FROM XXX WHERE month = '9' ORDER BY ztdbl DESC limit 10
如果加过滤器的话如何实现呢?


下面是我写的未生效的脚本:
var tableData2 = getViewData("表2")
if(tableData2.get(1,3)  / 15 == 1) {
     var loc = new Locator(["c-3"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,4)  / 40 == 1) {
     var loc = new Locator(["c-4"], COL, DETAIL)
    2.setColWidth(1, 0)
}
if(tableData2.get(1,5)  / 10 == 1) {
     var loc = new Locator(["c-5"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,6)  / 5 == 1) {
     var loc = new Locator(["c-6"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,7)  / 5 == 1) {
     var loc = new Locator(["c-7"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,8)  / 5 == 1) {
     var loc = new Locator(["c-8"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,9)  / 5== 1) {
     var loc = new Locator(["c-9"], COL, DETAIL)
    2.setColWidth(loc, 0)
}
if(tableData2.get(1,10)  / 15 == 1) {
     var loc = new Locator(["c-10"], COL, DETAIL)
    2.setColWidth(loc, 0)
}

求助!!!


作者: 美滋滋    时间: 2021-10-19 11:41
本帖最后由 lijie 于 2021-10-19 16:53 编辑

还有一种笨SQL的写法,
(select * from XXX where month = '1月' order by ztdbl desc limit 10)
union all
(select * from XXX where month = '2月' order by ztdbl desc limit 10)
union all
(select * from XXX where month = '3月' order by ztdbl desc limit 10)



union all
(select * from XXX where month = '12月' order by ztdbl desc limit 10)

作者: 天道酬勤    时间: 2021-10-19 11:44
刚刚的图片比较模糊

作者: 美滋滋    时间: 2021-10-19 11:53
我建议你先DEBUG一下 tableData2.get(1,3),tableData2.get(1,4) ~ tableData2.get(1,10) 这些数据是什么?
作者: 永洪tech-wisiy    时间: 2021-10-19 13:21
把你这里的(1,3),(1,4),第二个数字全部-1

作者: 天道酬勤    时间: 2021-10-19 14:25
lijie 发表于 2021-10-19 11:53
我建议你先DEBUG一下 tableData2.get(1,3),tableData2.get(1,4) ~ tableData2.get(1,10) 这些数据是什么? ...

大神你好,debug的结果是下面列的第一个数值,难道要循环吗?也就是说是要循环所有行吗?而不是第 0+1 行吗?
作者: 天道酬勤    时间: 2021-10-19 14:34
永洪tech-wisiy 发表于 2021-10-19 13:21
把你这里的(1,3),(1,4),第二个数字全部-1

首先,这些表头其实是一个个的度量,我直接拉过来的;然后,按照上面那个大神说的,debug了一下,结果是每个度量的第一个值(表头下面的第一个数值),按照您所说的设置为 -1,结果是 “数组下标越界异常”,下面是图片[attach]14200[/attach]


作者: 永洪tech-wisiy    时间: 2021-10-19 14:53
天道酬勤 发表于 2021-10-19 14:34
首先,这些表头其实是一个个的度量,我直接拉过来的;然后,按照上面那个大神说的,debug了一下,结果是 ...

get这个方法,里面两个参数分别代表行列数,前者为行后者为列,表格的行列数都是从0开始的,(1,3)代表第二行第4列的单元格
作者: 天道酬勤    时间: 2021-10-19 14:55
永洪tech-wisiy 发表于 2021-10-19 14:53
get这个方法,里面两个参数分别代表行列数,前者为行后者为列,表格的行列数都是从0开始的,(1,3)代表第 ...

您好,那现在我需要拿到每个列下面的所有行的数据,是循环所有列、所有行吗?我需要拿到每个列下面的所有行的数据与满分相除,只要是都为1的话,就设置列宽为0
作者: 美滋滋    时间: 2021-10-19 14:58
geiviewdata的方法是获取数据表中所有当前数据,所以你的tableData2中获取的数据是整个表格中的所有数据,其中你用tableData2.get(1,3)获取的是你表中的第二行第四列的数据。后面的以此类推。行和列都是以0为开始的。
比如tableData2.get(0,0) 获取的应该是‘是否百强’四个字。
作者: 永洪tech-wisiy    时间: 2021-10-19 15:03
天道酬勤 发表于 2021-10-19 14:55
您好,那现在我需要拿到每个列下面的所有行的数据,是循环所有列、所有行吗?我需要拿到每个列下面的所有 ...

每个列的所有行得循环才能取
作者: 美滋滋    时间: 2021-10-19 15:06
另外,我不太理解的是,我看你的代码,是判断得分率是否为100%,如果是100%,则不显示当前一列。但是你判断条件只判断了第一行的数据,是说只按照第一行的数据作为判断依据吗?
还是说,得分百分百的不显示,得分不是百分百的才就显示呢?比如一列中,有些行的数据得分是100%,有些行的数据得分不是100%,那么得分率为100%的则显示空,得分率不是100%的则正常显示?
作者: 美滋滋    时间: 2021-10-19 15:10
我懂你的意思了,如果某一个指标所有数据都是满分,则该指标不显示,是这个意思吧?
作者: 美滋滋    时间: 2021-10-19 15:18
本帖最后由 lijie 于 2021-10-19 15:19 编辑

以你图中400V监测达标率(图中第三列)为例,参照如下代码:
var visableflag = flase;
for (1=1;i<tableData2.size();i++) {
    if(tableData2.get(i,2)  / 15 != 1) {
         visableflag = true
    }
}
if (!visableflag) {
    var loc = new Locator(["c-2"], COL, DETAIL)
    表2.setColWidth(loc, 0)
}

写其他列代码前,注意初始化 visableflag  = false

作者: 天道酬勤    时间: 2021-10-19 15:43
lijie 发表于 2021-10-19 15:18
以你图中400V监测达标率(图中第三列)为例,参照如下代码:
var visableflag = flase;
for (1=1;i ...

// 获取所有数据
var tableData = getViewData("表2")
// 获取总行数
var length = tableData.size()       
// 加和变量
var sum1 = 0
// 循环第4列的所有数据,并加和计算
for(var i = 1; i <length; i++) {
sum1 += tableData.get(i,3)
}
// 如果 和 与 满分值 15 求余运算为 0,设置第三列宽度为0(隐藏)
if(sum1 % 15 == 0) {
var loc = new Locator(["c-3"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum2 = 0
for(var i = 1; i < length; i++) {
sum2 += tableData.get(i,4)
}
if(sum2 % 40 == 0) {
var loc = new Locator(["c-4"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum3 = 0
for(var i = 1; i < length; i++) {
sum3 += tableData.get(i,5)
}
if(sum3 % 10 == 0) {
var loc = new Locator(["c-5"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum4 = 0
for(var i = 1; i < length; i++) {
sum4 += tableData.get(i,6)
}
if(sum4 % 5 == 0) {
var loc = new Locator(["c-6"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum5 = 0
for(var i = 1; i < length; i++) {
sum5 += tableData.get(i,7)
}
if(sum5 % 5 == 0) {
var loc = new Locator(["c-7"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum6 = 0
for(var i = 1; i < length; i++) {
sum6 += tableData.get(i,8)
}
if(sum6 % 5 == 0) {
var loc = new Locator(["c-8"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum7 = 0
for(var i = 1; i < length; i++) {
sum7 += tableData.get(i,9)
}
if(sum7 % 5 == 0) {
var loc = new Locator(["c-9"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum8 = 0
for(var i = 1; i < length; i++) {
sum8 += tableData.get(i,10)
}
if(sum8 % 15 == 0) {
var loc = new Locator(["c-10"], COL, DETAIL)
表2.setColWidth(loc, 0)
}

感觉您说的与我现在做的非常相似,方便请您看下我的脚本为什么没有生效吗?


作者: 天道酬勤    时间: 2021-10-19 15:47
永洪tech-wisiy 发表于 2021-10-19 15:03
每个列的所有行得循环才能取

// 获取所有数据
var tableData = getViewData("表2")
// 获取总行数
var length = tableData.size()       
// 加和变量
var sum1 = 0
// 循环第4列的所有数据,并加和计算
for(var i = 1; i <length; i++) {
sum1 += tableData.get(i,3)
}
// 如果 和 与 满分值 15 求余运算为 0,设置第三列宽度为0(隐藏)
if(sum1 % 15 == 0) {
var loc = new Locator(["c-3"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum2 = 0
for(var i = 1; i < length; i++) {
sum2 += tableData.get(i,4)
}
if(sum2 % 40 == 0) {
var loc = new Locator(["c-4"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum3 = 0
for(var i = 1; i < length; i++) {
sum3 += tableData.get(i,5)
}
if(sum3 % 10 == 0) {
var loc = new Locator(["c-5"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum4 = 0
for(var i = 1; i < length; i++) {
sum4 += tableData.get(i,6)
}
if(sum4 % 5 == 0) {
var loc = new Locator(["c-6"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum5 = 0
for(var i = 1; i < length; i++) {
sum5 += tableData.get(i,7)
}
if(sum5 % 5 == 0) {
var loc = new Locator(["c-7"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum6 = 0
for(var i = 1; i < length; i++) {
sum6 += tableData.get(i,8)
}
if(sum6 % 5 == 0) {
var loc = new Locator(["c-8"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum7 = 0
for(var i = 1; i < length; i++) {
sum7 += tableData.get(i,9)
}
if(sum7 % 5 == 0) {
var loc = new Locator(["c-9"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
var sum8 = 0
for(var i = 1; i < length; i++) {
sum8 += tableData.get(i,10)
}
if(sum8 % 15 == 0) {
var loc = new Locator(["c-10"], COL, DETAIL)
表2.setColWidth(loc, 0)
}
能请您看下这段脚本为什么没有效果吗?最前方那段脚本加着注释呢,感谢您


作者: 永洪tech-wisiy    时间: 2021-10-19 15:48
天道酬勤 发表于 2021-10-19 15:47
// 获取所有数据var tableData = getViewData("表2")// 获取总行数var length = tableData.size()        // 加 ...

debug(sum)看你的数据
作者: 天道酬勤    时间: 2021-10-19 15:52
永洪tech-wisiy 发表于 2021-10-19 15:48
debug(sum)看你的数据

debug结果正常啊,debug(sum1) = 150
作者: 天道酬勤    时间: 2021-10-19 15:53
永洪tech-wisiy 发表于 2021-10-19 15:48
debug(sum)看你的数据

然后,150 % 15 == 0  true ,应该是设置列宽为 0 的
作者: 永洪tech-wisiy    时间: 2021-10-19 15:58
天道酬勤 发表于 2021-10-19 15:53
然后,150 % 15 == 0  true ,应该是设置列宽为 0 的

没生效是因为你的脚本没用对,locator要分组件,不同组件的定位区域不同。c-0只能用于自由表,普通表应该是使用的列名称,也就是表头名来定位整个列
(, 下载次数: 37)