需要使用 lotus 脚本将多值导出到 excel 到不同的行
Multi-values needs to be exported to excel to different rows using lotus script
我试图导出多值字段,但无法实现。我尝试使用 Ubound 导出,但情况是我需要第一行中的第一个值和第二行中的第二个值,反之亦然。请帮我解决这个问题。我正在使用 excel 应用程序导出数据。
提前致谢。
ForAll b In fieldList
If UBound(doc.getitemvalue(b)) <1 Then
worksheet.cells(i,j).value =doc.getitemvalue(CStr(b))
Else
'Join(doc.getitemvalue(CStr(b)),Chr(10))
worksheet.cells(i,j).value =Join(doc.getitemvalue(CStr(b)),Chr(10))
End If
End Forall
创建一个循环,按索引遍历每个字段的所有值(在我的代码示例中为“x”)。再次使用 x 来偏移行值。
您将遇到一个问题,即每个 fieldName 的值将在电子表格中被覆盖,因为 i 和 j 总是相同的,所以如果你的 fieldList 中有多个 fieldName,你需要做一些关于那也是。在我的示例中,我为每个 fieldName 递增了 j,以便它们位于不同的电子表格列中
ForAll fieldName In fieldList
For x = LBound(doc.getitemvalue(fieldName)) to Ubound(doc.getitemvalue(fieldName))
worksheet.cells(i + x, j).value = doc.getitemvalue(fieldName)(x)
Next
j = j + 1
End Forall
实现您在评论中提出的要求的替代版本:
ForAll fieldName In fieldList
For x = LBound(doc.getitemvalue(fieldName)) to Ubound(doc.getitemvalue(fieldName))
worksheet.cells(i, j + x).value = doc.getitemvalue(fieldName)(x)
Next
i = i + 1
End Forall
doc.getitemvalue(CStr(b))
总是 returns 变体数组,即使 Ubound
小于一。
您的 Then
子句中的代码需要取消引用数组的第 0 个条目:
worksheet.cells(i,j).value =doc.getitemvalue(CStr(b))(0)
让我们假设以下文档:
Fieldname
Value 0
Value 1
Value 2
FirstField
Value0-First
SecondField
Value0-Second
Value1-Second
Value2-Second
ThirdField
Value0-Third
Value1-Third
解决方案一:
如果你希望结果看起来像这样
FirstField
SecondField
ThirdField
Value0-First
Value0-Second
Value0-Third
Value1-Second
Value1-Third
Value2-Second
然后你使用下面的代码:
cellY = 2
cellX = 1
Forall fieldName in fieldNameList
For y = 0 to ubound( doc.GetitemValue( fieldName ) )
worksheet.cells(cellY + y, cellX).value = doc.GetitemValue( fieldName )(y)
Next
cellX = cellX + 1
End Forall
方案二:如果你希望结果看起来像这样
Fieldname
Value 0
Value 1
Value 2
FirstField
Value0-First
SecondField
Value0-Second
Value1-Second
Value2-Second
ThirdField
Value0-Third
Value1-Third
然后你使用下面的代码:
cellY = 1
cellX = 2
Forall fieldName in fieldNameList
For x = 0 to ubound( doc.GetitemValue( fieldName ) )
worksheet.cells(cellY, cellX+x).value = doc.GetitemValue( fieldName )(x)
Next
cellY = cellY + 1
End Forall
方案三:
如果你希望结果看起来像这样
All fields
FirstField
Value0-First
SecondField
Value0-Second
Value1-Second
Value2-Second
ThirdField
Value0-Third
Value1-Third
然后你使用下面的代码:
cellY = 1
cellX = 1
Forall fieldName in fieldNameList
worksheet.cells(cellY, cellX).value = fieldName
For y = 0 to ubound( doc.GetitemValue( fieldName ) )
cellY = cellY + 1
worksheet.cells(cellY, cellX).value = doc.GetitemValue( fieldName )(y)
Next
cellY = cellY + 1
End Forall
我试图导出多值字段,但无法实现。我尝试使用 Ubound 导出,但情况是我需要第一行中的第一个值和第二行中的第二个值,反之亦然。请帮我解决这个问题。我正在使用 excel 应用程序导出数据。
提前致谢。
ForAll b In fieldList
If UBound(doc.getitemvalue(b)) <1 Then
worksheet.cells(i,j).value =doc.getitemvalue(CStr(b))
Else
'Join(doc.getitemvalue(CStr(b)),Chr(10))
worksheet.cells(i,j).value =Join(doc.getitemvalue(CStr(b)),Chr(10))
End If
End Forall
创建一个循环,按索引遍历每个字段的所有值(在我的代码示例中为“x”)。再次使用 x 来偏移行值。
您将遇到一个问题,即每个 fieldName 的值将在电子表格中被覆盖,因为 i 和 j 总是相同的,所以如果你的 fieldList 中有多个 fieldName,你需要做一些关于那也是。在我的示例中,我为每个 fieldName 递增了 j,以便它们位于不同的电子表格列中
ForAll fieldName In fieldList
For x = LBound(doc.getitemvalue(fieldName)) to Ubound(doc.getitemvalue(fieldName))
worksheet.cells(i + x, j).value = doc.getitemvalue(fieldName)(x)
Next
j = j + 1
End Forall
实现您在评论中提出的要求的替代版本:
ForAll fieldName In fieldList
For x = LBound(doc.getitemvalue(fieldName)) to Ubound(doc.getitemvalue(fieldName))
worksheet.cells(i, j + x).value = doc.getitemvalue(fieldName)(x)
Next
i = i + 1
End Forall
doc.getitemvalue(CStr(b))
总是 returns 变体数组,即使 Ubound
小于一。
您的 Then
子句中的代码需要取消引用数组的第 0 个条目:
worksheet.cells(i,j).value =doc.getitemvalue(CStr(b))(0)
让我们假设以下文档:
Fieldname | Value 0 | Value 1 | Value 2 |
---|---|---|---|
FirstField | Value0-First | ||
SecondField | Value0-Second | Value1-Second | Value2-Second |
ThirdField | Value0-Third | Value1-Third |
解决方案一: 如果你希望结果看起来像这样
FirstField | SecondField | ThirdField |
---|---|---|
Value0-First | Value0-Second | Value0-Third |
Value1-Second | Value1-Third | |
Value2-Second |
然后你使用下面的代码:
cellY = 2
cellX = 1
Forall fieldName in fieldNameList
For y = 0 to ubound( doc.GetitemValue( fieldName ) )
worksheet.cells(cellY + y, cellX).value = doc.GetitemValue( fieldName )(y)
Next
cellX = cellX + 1
End Forall
方案二:如果你希望结果看起来像这样
Fieldname | Value 0 | Value 1 | Value 2 |
---|---|---|---|
FirstField | Value0-First | ||
SecondField | Value0-Second | Value1-Second | Value2-Second |
ThirdField | Value0-Third | Value1-Third |
然后你使用下面的代码:
cellY = 1
cellX = 2
Forall fieldName in fieldNameList
For x = 0 to ubound( doc.GetitemValue( fieldName ) )
worksheet.cells(cellY, cellX+x).value = doc.GetitemValue( fieldName )(x)
Next
cellY = cellY + 1
End Forall
方案三: 如果你希望结果看起来像这样
All fields |
---|
FirstField |
Value0-First |
SecondField |
Value0-Second |
Value1-Second |
Value2-Second |
ThirdField |
Value0-Third |
Value1-Third |
然后你使用下面的代码:
cellY = 1
cellX = 1
Forall fieldName in fieldNameList
worksheet.cells(cellY, cellX).value = fieldName
For y = 0 to ubound( doc.GetitemValue( fieldName ) )
cellY = cellY + 1
worksheet.cells(cellY, cellX).value = doc.GetitemValue( fieldName )(y)
Next
cellY = cellY + 1
End Forall