【发布时间】: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