2013-05-13 63 views
1

使用LotusScript访问ColumnValues(通过NotesDocument或NotesViewEntry访问的值的变体数组)时,某些数组元素可能包含一个或多个元素中的嵌入数组。例如:LotusScript View ColumnValues处理嵌入式数组

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 

上述作品,但速度很慢许多列,没有任何人有另一种方法?

回答

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只出现一次检索和性能对于许多columnns不受影响。 (如果使用For循环,则每次查找整个数组,然后从数组中选择1个元素)。

0

另一个想法:如果你要检索的数据几乎总是标量,则可以使用单一分配变体:

dim v as variant 
v = doc.ColumnValues 

然后,如果这样的错误,因为类型不匹配的,(嵌入式阵列) ,那么只能在循环中重新处理数据作为错误处理的一部分,然后继续。大多数情况下避免循环,整体速度应该更快。 (但是,如果大部分数据是多值的,那么错误/数组处理路线可能会变慢)!