使用 Smartsheet API 的 Cell ColumnType 为 NULL

Cell ColumnType is NULL using Smartsheet API

我正在尝试将我的 SmartSheet API 从 v1 更新到 v2,但在下面的代码上遇到了一些困难。

所选 sheet 的代码 returns 行,但是行内所有单元格的 "ColumnType" 属性 均为 NULL。

我知道 return 你必须将它指定为一个包含 - 我相信我有。

Dim sheet As Sheet = smartsheet.SheetResources.GetSheet(curSheet.Id, New RowInclusion() {RowInclusion.COLUMN_TYPE, RowInclusion.COLUMNS}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)

For Each Row As Row In sheet.Rows
If Row.ParentRowNumber Is Nothing Then
Dim i As Integer = 0
Dim colType As ColumnType
If Not Row.Cells(i).ColumnType = ColumnType.TEXT_NUMBER Then
'Do some stuff here...
End if
Next

任何帮助都会很棒。

谢谢, 史蒂夫

简短的回答是从 https://github.com/smartsheet-platform/smartsheet-csharp-sdk/pull/60 获取最新的 SDK 并将您的 GetSheet 更新为以下内容:

Dim sheet As Sheet = client.SheetResources.GetSheet(SHEETID, New SheetLevelInclusion() {SheetLevelInclusion.COLUMN_TYPE}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)

注意使用 SheetLevelInclusion 而不是 RowInclusion。你应该都准备好了。

如果您关心细节,较长的答案是... GetSheet 方法不接受 RowInclusion 的 array/IEnumerable 作为第二个参数。它需要 SheetLevelExclusion 的数组/IEnumerable。在 C# 中,相同的调用会失败,因为 C# 对 IEnumerable 的泛型类型参数强加了更严格的类型检查。但是,由于 Visual Basic 对 Enum 类型之间的隐式转换及其对数组(以及 IEnumerable 等类似类型)的宽松转换,可以调用具有 "wrong" 类型的函数当参数是数组/IEnumerable 且元素是枚举时的参数。在这种情况下,Visual Basic 实际上是将 RowInclusion 值转换为它们的基础数值(枚举总是隐式或显式地由基础数值类型支持)并将这些值转换为对应于相同的基础数值,以便它可以调用 GetSheet 方法。

这里的另一个问题是 SDK 没有 COLUMN_TYPE 作为可用的 SheetLevelExclusion 值。所以我上面链接的 pull request/branch 添加了这一点。在我这里的简单测试中,它成功了。