使用LotusScript访问ColumnValues(通过NotesDocument或NotesViewEntry访问的值的变量数组)时,某些数组元素可能包含一个或多个元素中的嵌入数组。例如:
doc.ColumnValues(0) = "A"
doc.ColumnValues(1) = ["A", "B"]
doc.ColumnValues(2) = 4
...
有没有办法一次性将所有数组值分配给数组?如果将ColumnValues数组赋值给变量变量,那么这只有在数组元素中没有嵌入数组数据的情况下才有效,即:ColumnValues(1)=" AB"不是" [A,B]"例如:
dim v as variant
v = doc.ColumnValues
如果存在数组,则此分配失败,但如果所有元素都是标量,则该分配有效。一种解决方法是确保所有ColumnValues都是标量(不是数组),但这不能保证。我唯一的其他解决方法是迭代所有ColumnValues并检查数组:
For i = 1 to ubound(doc.ColumnValues) 'or other columcount var!
v=doc.ColumnValues(i)
if isarry(v) then
a=join(v,";")
else
a=v
end if
Next
上述工作但许多专栏都很慢,有没有其他方法?
答案 0 :(得分:3)
经过一些测试后,我发现了以下内容:如果我使用了forall循环...
dim cvals() as variant
redim cvals(ncolsreqd)
i = 0
ForAll v In doc.columnValues
If IsArray(v) Then
cvals(i) = Join(v, ";")
Else
cvals(i) = v
End if
i = i + 1
End ForAll
Print "v:= " & Join(cvals, ",")
然后ColumnValues只显示检索一次,许多列的性能不受影响。 (如果使用For循环,则每次查找整个数组,然后从数组中选择1个元素。)
答案 1 :(得分:0)
另一个想法:如果要检索的数据几乎总是标量,则可以使用单个赋值变量:
dim v as variant
v = doc.ColumnValues
然后,如果由于类型不匹配(嵌入式数组)而导致此错误,则只在forall循环中重新处理数据作为错误处理的一部分,然后重新开始。在大多数情况下避免使用forall loop,并且整体应该更快。 (但是,如果大部分数据是多值的,那么错误/数组处理路径可能会更慢)!