使用 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 添加了这一点。在我这里的简单测试中,它成功了。
我正在尝试将我的 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 添加了这一点。在我这里的简单测试中,它成功了。