LotusScript View ColumnValues, работающий со встроенными массивами
При работе с 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
Вышеописанное работает, но очень медленно для многих столбцов, есть у кого-нибудь альтернативный подход?
2 ответа
Хорошо, после некоторого тестирования, я обнаружил следующее: Если я использую цикл 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 элемент).
Другая идея: если данные, которые вы хотите получить, почти всегда скалярны, вы можете использовать одно назначение для варианта:
dim v as variant
v = doc.ColumnValues
Затем, если эти ошибки вызваны несоответствием типов (встроенный массив), то только повторная обработка данных в цикле повторного выполнения как часть обработки ошибок, а затем возобновление. Избегает повторной петли в большинстве случаев и должен быть быстрее в целом. (Однако, если большая часть данных многозначна, маршрут обработки ошибок / массивов может быть медленнее)!