inroad 发表于 2023-10-10 10:06:19

AR16 数组脚本问题

我有个json是这样的
[*]"wei_hai_shi_bie":[
{
"name":"机械伤害",
"ancestors":[
{
"Id":"D1FE114C-2118-5E91-DA49-3A0B54DB0F94",
"HierarchyId":"/31/",
"HierarchyLevel":1,
"ColorContent":"",
"ColorSwitch":false,
"name":"危害识别-南京诚志送电"
}
],
"id":"fdf53428-6039-b2c3-76d5-3a0b54db5920",
"dictCode":"D1FE114C-2118-5E91-DA49-3A0B54DB0F94",
"nodeCode":"ji_xie_shang_hai",
"colorContent":"",
"colorSwitch":false,
"hierarchyId":"/31/1/",
"TAGSORT":0
},
{
"name":"触电",
"ancestors":[
{
"Id":"D1FE114C-2118-5E91-DA49-3A0B54DB0F94",
"HierarchyId":"/31/",
"HierarchyLevel":1,
"ColorContent":"",
"ColorSwitch":false,
"name":"危害识别-南京诚志送电"
}
],
"id":"0cf5622a-8563-9137-c706-3a0b54db70e6",
"dictCode":"D1FE114C-2118-5E91-DA49-3A0B54DB0F94",
"nodeCode":"chu_dian",
"colorContent":"",
"colorSwitch":false,
"hierarchyId":"/31/2/",
"TAGSORT":0
}
]我要取出,拿$.['wei_hai_shi_bie'][*].name。与”机械伤害,触电,电弧灼伤,误送“作比较。如果包含加方框,但是在软件中放入数据,会自动循环$.['wei_hai_shi_bie'][*].name,导致我脚本拿出来的数据是这样的,我想的是两个一行比如。但是我现在出来的是这样的。代码如下Function ProcessData(a As String, b As String) As String
        Dim arrA() As String
        arrA = Split(a, ";")

        Dim result As String
        result = ""

        ' 遍历数组B中的每个元素
        Dim i As Integer
        For Each itema As String In arrA
                If itema = b Then
                        result = result & itema & "■"
                Else
                        result = result & itema & "□"
                End If
        Next

        ' 去掉最后一个逗号
        result = Left(result, Len(result))

        ' 返回结果
        ProcessData = result
End Function

Eden.Sun 发表于 2023-10-10 10:06:20

我们分析了您的文件,并不是您的数据重复显示了三次,是您的数据源中有三条数据,您的函数调用了三次,每次传递的参数都不同,展现的效果也不同:



出现这个情况的原因是因为您使用的是表格组件进行展示,表格组件会根据绑定的数据集的数据量自动扩展,扩展的每一行都是一条数据;然后每一行都调用了咱们的函数,并把对应行的字段的值当做入参传到了脚本函数里面,就出现了您遇到的情况:


如果您只想让现实一次,那您可以用单独的文本框组件来显示,这样只会显示一次,但是返回的结果是根据第一条数据进行处理的结果:


Felix.Li 发表于 2023-10-10 14:04:00

问题描述:

脚本控制没两个数据换一行

解决方法:
您的脚本代码中并没有控制每两个换一行,您只需要做一个判断,每次增2之后,加一个换行符即可,下面是我修改后的代码:
Function ProcessData(a As String, b As String) As String
        Dim arrA() As String
        arrA = Split(a, ";")

        Dim result As String
        result = ""

        ' 遍历数组B中的每个元素
        Dim i As Integer
        i = 0
        For Each itema As String In arrA
                If itema = b Then
                        result = result & itema & "■"
                Else
                        result = result & itema & "□"
                End If
                If i Mod 2 = 1 Then
                        result = result & vbCrLf ' 添加换行符
                End If
                i = i + 1
        Next

        ' 去掉最后一个逗号
        result = Left(result, Len(result))

        ' 返回结果
        ProcessData = result
End Function实现效果如下:

inroad 发表于 2023-10-10 14:20:25

Felix.Li 发表于 2023-10-10 14:04
问题描述:

脚本控制没两个数据换一行


但是出来的结果还是循环了三遍,和我的结果一样,且只是做了一个两个一行的操作。我想的是输出出来结果为         
机械伤害■    触电■
电弧灼伤■    误送□

inroad 发表于 2023-10-10 14:21:59

inroad 发表于 2023-10-10 14:20
但是出来的结果还是循环了三遍,和我的结果一样,且只是做了一个两个一行的操作。我想的是输出出来结果为 ...

楼主,请帮我分析应该怎么做。数据源就是顶楼帖子上的数据,你可以尝试用我的数据输出。我的入参是ProcessData("机械伤害;触电;电弧灼伤;误送",Fields!Field1.Value)

inroad 发表于 2023-10-10 14:24:49

inroad 发表于 2023-10-10 14:20
但是出来的结果还是循环了三遍,和我的结果一样,且只是做了一个两个一行的操作。我想的是输出出来结果为 ...

而不是出来三遍
机械伤害■    触电□
电弧灼伤□    误送□

机械伤害□    触电■
电弧灼伤□    误送□

机械伤害□    触电□
电弧灼伤■    误送□

Eden.Sun 发表于 2023-10-10 15:45:34

inroad 发表于 2023-10-10 14:24
而不是出来三遍
机械伤害■    触电□
电弧灼伤□    误送□



您好,那应该是您的入参有问题了,我使用楼上版主的脚本,用您的入参进行测试,没有出现重复的情况,您看一下是不是您的入参有问题,

inroad 发表于 2023-10-10 16:49:24

Eden.Sun 发表于 2023-10-10 15:45
您好,那应该是您的入参有问题了,我使用楼上版主的脚本,用您的入参进行测试,没有出现重复的情况,您 ...

老哥,你的入参就和我不一样吧。你可以看看我的入参,在4#

Eden.Sun 发表于 2023-10-10 18:01:15

inroad 发表于 2023-10-10 16:49
老哥,你的入参就和我不一样吧。你可以看看我的入参,在4#

方便的话,您提供一下您的报表文件和一份demo数据,我们本地试一下。我这边确实没有复现出来您的这种场景。

inroad 发表于 2023-10-11 09:22:22

Eden.Sun 发表于 2023-10-10 18:01
方便的话,您提供一下您的报表文件和一份demo数据,我们本地试一下。我这边确实没有复现出来您的这种场景 ...

您好,我的deom可以看下
页: [1] 2
查看完整版本: AR16 数组脚本问题