在 With 函数的记录范围内创建“Measurements”值时,您会将所有行合并为一个行 - 这不是您想要的。如果你有一个名为'datasource'的数据源,相当于下面的集合:
ClearCollect(
datasource,
{ data: "86, 50, 21, 411, 83, 60, 0, 112, 47, 118.5, 1.31, 3.79, 2.3, 70, 401, 125", serialno: "1", loadord: "1" },
{ data: "86, 50, 23, 416, 83, 60, 0, 113, 49, 117.3, 1.31, 3.76, 2.4, 65, 400, 124", serialno: "1", loadord: "1" },
{ data: "95, 50, 23, 436, 84, 60, 0, 115, 51, 131.3, 1.45, 3.69, 2.8, 65, 400, 136", serialno: "1", loadord: "1" },
{ data: "65, 50, 22, 389, 82, 60, 0, 112, 50, 92.8, .97, 3.76, 2.2, 60, 401, 93", serialno: "1", loadord: "1" },
{ data: "43, 50, 21, 332, 81, 60, 0, 104, 47, 63.3, .62, 3.86, .8, 50, 402, 62", serialno: "1", loadord: "1" },
{ data: "22, 50, 21, 237, 80, 60, 0, 101, 46, 35.3, .25, 4, .8, 40, 402, 32", serialno: "1", loadord: "1" },
{ data: "00, 50, 21, 122, 79, 60, 0, 95, 44, 11.7, .14, 4.14, .1, 35, 402, 0", serialno: "1", loadord: "1" }
)
那么你可以使用类似下面的表达式:
With(
{
Headers: Split("Power,Freq,Comp Intake,Exhaust,Eng Fresh Water,RW IN,RW OUT,Oil Sump,Inlet Manifold,Fuel Use,Boost,Engine Oil Press,Smoke,Blow by,Voltage,Current", ","),
Units: Split("KWe,Hz,ºC,ºC,ºC,ºC,ºC,ºC,ºC,mm3/ST,Bar,Bar,FSN,L/min,volts,amps", ","),
Measurements: SortByColumns(Search(Filter('datasource',Len(data) > 20),TextInput3.Text,"serialno"),"loadord")
},
"<table border='1'>" &
"<tr>" & Concat(Headers, "<th>" & Result & "</th>") & "</tr>" &
"<tr>" & Concat(Units, "<th>" & Result & "</th>") & "</tr>" &
Concat(
Measurements,
"<tr>" & Concat(Split(data, ","), "<td align='middle'>" & Result & "</td>") & "</tr>"
) &
"</table>")
这是一种读取将测量值添加到表中的表达式部分的方法。我经常发现“从内到外”阅读这些表达方式很有用
- “过滤器”功能将“数据源”中的数据限制为仅对“数据”列具有足够大值的数据
- 之前的结果被传递给'Search'函数,以进一步过滤'serialno'与用户在TextInput3中输入的值匹配的那些
- 然后根据“loadord”列对先前的结果进行排序;到目前为止,结果是一个包含多个测量集的表格(每个测量集都是逗号分隔的单独测量值)
- 之前的结果在 With 函数中被分配了别名“测量”。请注意,这不是绝对必要的——我们可以直接使用 Sort(Search(Filter(...))) 表达式,但我发现将表达式分解可以更容易理解它们
- 标题也一样 - 不需要通过 With 函数完成的别名;我们可以将文本
<tr><th>Power</th><th>Freq</th>...</tr> 直接放在表达式中,而不是拆分和连接逗号分隔的测量名称。
- 表达式的输出是通过连接一些字符串来创建的。要将上一步中表的所有行连接成一个字符串,我们使用外部 Concat 函数 - 它会获取“Measurements”的每一行并在表达式中使用它
- 由于测量值是用逗号分隔的,我们使用 Split 函数将其分解,并使用另一个嵌套的 Concat 调用将各个值包装在创建表所需的
<td>...</td> 中。