【问题标题】:How to iterate through each cell in a worksheet range and unlock them based on a Regex match如何遍历工作表范围中的每个单元格并根据正则表达式匹配解锁它们
【发布时间】:2015-12-07 01:59:35
【问题描述】:

我尝试并未能找到函数的语法来遍历工作表中的每个单元格并将其地址与正则表达式匹配,并根据正匹配解锁单元格,但似乎无法转换 IXLCell 地址到字符串? 这是我一直在使用的函数:

Private Function NeedsToBeUnlocked(cell As IXLCell) As Boolean
    Dim returnValue = False
    Dim address As String = CType(cell.Address, String)
    Dim reg As Regex = New Regex("^B5|[CDEFGH][56]|H9|[CDEFGH]12|[CDEFGH]4[5-9]|[CDEFGH]5[012]|[GH]6[6-9]|[GH]78[0-7]|[GH]88|[GH]9[0,6-9]|H1[47]|H2[1278]$|H3[01347]|[BCDFGH]16[246]|[CDEFGH]15[789]|[CDEFGH]160|E16[24]|[GH]10[0-9]|[GH]11[012]|G129|[GH]13[01]|H11[789]|H12[012,6-9]|H13[289]|H14[0-5,78]$")
    Dim match As Match = reg.Match(address)
    If match.Success Then
        returnValue = True
    End If
    Return returnValue
End Function

这就是 For Each 循环。 显然语法不正确,但你明白我的意思。

For Each c As IXLCell In xlWS.Range("A1", "I177").Cells
    If NeedsToBeUnlocked(c.Address) Then
        c.Style.Protection.SetLocked(False)
    End If
Next

这是我的天真尝试,不只是使用这样的一系列直接陈述。一定有更好的办法吗?

xlWS.Range("B5", "H5").Style.Protection.SetLocked(False)
xlWS.Range("C6", "H6").Style.Protection.SetLocked(False)
xlWS.Cell("H9").Style.Protection.SetLocked(False)

【问题讨论】:

    标签: vb.net .net-4.0 visual-studio-2015 openxml closedxml


    【解决方案1】:

    另一种不使用 RegEx 的方法是定义一个范围数组并在这些范围内循环:

    Dim ranges As String() = { "B5:H5", "C6:H6", "H9", ... }
    
    For Each range as String in ranges
        xlWS.Range(range).Style.Protection.SetLocked(false)
    Next
    

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解了您的问题,但循环遍历我经常使用的单元格的方法是:

      For ic 1 to 5         ' i column - in range from A to E
          For ir 1 to 20    ' i row
              wSheet.Cells(ir, ic).Value = "Col=" & ic & "  row=" & ir
          Next ir
      Nect ic
      

      【讨论】:

        【解决方案3】:

        您的NeedsToBeUnlocked 函数使用IXLCell 类型的参数声明,但您使用IXLAddress 类型的参数调用它。将您的呼叫更改为

        If NeedsToBeUnlocked(c) Then
        

        并在函数更改中将单元格的地址作为字符串获取

        Dim address As String = CType(cell.Address, String)
        

        Dim address As String = cell.Address.ToString()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-05
          • 1970-01-01
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多