【问题标题】:Get A List Of Excel Cells Where The Cell Name Contains A Substring获取单元格名称包含子字符串的 Excel 单元格列表
【发布时间】:2017-05-18 03:25:01
【问题描述】:
在 VB 或 C# 中使用 Microsoft.Office.Interop.Excel 如何执行以下操作?
我有一个为每个单元格分配名称的 Excel 工作表,我正在尝试获取名称包含某个子字符串的单元格列表。也许是这样的:
worksheet.Cells.Where(x => x.Name.Contains("_"));
我不知道该怎么做,因为 worksheet.Cells 是一个范围而不是一个集合。有没有办法做到这一点?
【问题讨论】:
标签:
c#
vb.net
excel
excel-interop
【解决方案1】:
在 VBA 中,您可以遍历 Names 集合。所有名称都是 Workbook 集合的属性;此外,那些具有工作表范围的名称也将在该工作表名称集合中。
所以要返回一个列表,取决于你想对列表做什么,一种方法是使用用户定义函数:
Option Explicit
Function GetNames(sContains As String) As Variant
Dim WB As Workbook
Dim N As Name, NS As Names
Dim colNames As Collection
Dim V() As Variant
Dim I As Long
Set WB = ThisWorkbook
Set NS = WB.Names
Set colNames = New Collection
ReDim V(0 To 1)
For Each N In NS
If N Like "*" & sContains & "*" Then
V(0) = N.Name
V(1) = N.RefersTo
colNames.Add V
End If
Next N
ReDim V(1 To colNames.Count, 1 To 2)
For I = 1 To colNames.Count
V(I, 1) = colNames(I)(0)
V(I, 2) = colNames(I)(1)
Next I
GetNames = V
End Function
【解决方案2】:
我必须解决一次类似的问题并使用:
currentFind 是一个 ExcelRange。
currentFind = mySheet.UsedRange.Find("_", misvalue,
Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,
Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
misvalue, misvalue);