【问题标题】:How can I specify the correct column?如何指定正确的列?
【发布时间】:2016-10-26 00:40:24
【问题描述】:

我需要根据数据所在的字段(列)做不同的事情。

            For Each row As DocumentFormat.OpenXml.Spreadsheet.Row In
                worksheet.Descendants(Of DocumentFormat.OpenXml.Spreadsheet.Row)
                    For Each cell As DocumentFormat.OpenXml.Spreadsheet.Cell In row
                        Select Case True
                            Case cell.CellReference.Value Like "C*"
                                'if this cell is in column C
                            Case cell.CellReference.Value Like "A*"
                                'if this cell is in column A
                            Case Else
                        End Select
                    Next
            Next

只要给定电子表格中的字段不超过 26 个,此方法就非常有效。

如何确保我的Like "A*" 不会对 AA、AB 等列做出反应?

请记住,OpenXML SDK 始终返回 .cellreference.value 的完整单元格引用,而不仅仅是列。 而且我需要指定我不是要批发丢弃任何大于 26 的列,而是要确保我指定了一个特定的列。受审查的列最终可能是 AA 或 AB,具体取决于创建特定源表的公司。我希望有一个属性,或者除此之外,其他人是如何学会引用 openxml 中的特定列的。

【问题讨论】:

  • 你能从单元格中获取列吗?
  • @ChrisF 谢谢。据我所知,获取该列的唯一方法是使用.cellreference.value,它返回一个字符串。如果存在另一种获取参考的方法,可能是不同的格式,它似乎没有记录在 MSDN 中。
  • 我没有考虑数据,只是获取参考的列部分。
  • @ChrisF 这是一个很好的观点。也许我可以取每个字符的ASC(),如果它在 64 到 90 之间(或者我的头顶上的任何东西),它将进入列部分,否则进入行部分,然后转换这些结果在开始我的select case 之前到一个 R1C1 类型变量 (array/object/dunno)。但这对于仅仅试图获得参考来说似乎非常密集。一定有更好的方法吧?
  • 您可以在尝试匹配的列字母后添加#,表示列字母后必须有一个数字 - 例如Case s Like "A#*"。这将匹配 A1 但不匹配 AA1

标签: .net spreadsheet openxml-sdk


【解决方案1】:

在您尝试匹配的列字母后添加# 将告诉匹配器该字母后必须有一个数字。如果该列实际上是 AA,这将阻止您检查 A 匹配。

Select Case True
    Case cell.CellReference.Value Like "C#*"
    'if this cell is in column C
    Case cell.CellReference.Value Like "A#*"
    'if this cell is in column A
    Case cell.CellReference.Value Like "AA#*"
    'if this cell is in column AA
    Case Else
End Select

documentation 开始,# 将匹配“任何一位数 (0–9)”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多