2013-05-13 40 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 

然後,如果這樣的錯誤,因爲類型不匹配的,(嵌入式陣列) ,那麼只能在循環中重新處理數據作爲錯誤處理的一部分,然後繼續。大多數情況下避免循環,整體速度應該更快。 (但是,如果大部分數據是多值的,那麼錯誤/數組處理路線可能會變慢)!