python Win32 Excel 是单元格范围

python Win32 Excel is cell a range

我正在编写一些 Python 代码来自动处理 Excel 电子表格。这个想法是使用电子表格模板来创建每日报告。几年前使用 Perl 看到了这个想法。不管怎样

以下是简单的规则: 带有工作簿的工作表按照它们出现的顺序进行处理。 在工作表中,单元格从左到右处理,然后从上到下处理。 定义的名称是单个单元格范围,可以包含静态值或查询结果。单元格可以包含注释,其中包含对 运行 的 SQL 查询。 ...

问题出在这里,当我处理单元格时,我需要检查单元格是否有附加注释以及单元格是否有名称。我能够处理附加的单元格评论。但我不知道如何确定一个单元格是否在命名范围内。在我的例子中,范围内的单个单元格。

我看到一个帖子建议这样做可行: 单元格名称 = ws.ActiveCell.Name.Name 运气不好。

有人知道怎么做吗? 我很接近但没有雪茄。

感谢您对此事的关注。

KD

好的,如果单元格没有范围名称,它就会出错。如果单元格具有范围名称,则以下代码 returns 名称:大成功!!

ws.Cells(r,c).Activate()
c  = xlApp.ActiveCell
cellName = c.Name.Name 

如果没有与单元格关联的名称,则会抛出异常。
因此,即使在 VBA 中,您也必须将这段代码包装在异常代码中。对此调用使用异常处理对我来说听起来很昂贵。

您可以考虑做的是首先构建一个包含作品中所有名称地址的列表sheet,然后根据列表检查每个单元格的地址以查看它是否已命名。

在 VBA 中,您可以通过以下方式获取名称集合(工作簿中的所有名称):

Set ns = ActiveWorkbook.Names

您可以确定名称是否指向当前 sheet 的一部分和单个单元格,这样:

shname = ActiveSheet.Name
Dim SheetNamedCellAddresses(1 To wb.Names.Count) as String
i = 1
For Each n in ns:
If Split(n.Value, "!")(0) = "=" & shname  And InStr(n.Value, ":") = 0 Then
' The name Value is something like "=Sheet1!A1"
' If there is no colon, it is a single cell, not a range of cells
SheetNamedCellAddresses(i) = Split(n,"=")(1) 'Add the address to your array, remove the "="
i = i + 1
End If
Next

现在您有一个字符串数组,其中包含当前 sheet 中所有命名单元格的地址。将该数组移动到 python 列表中,您就可以开始了。