openpyxl - 问题访问命名范围?

openpyxl - issue accessing named range?

所以我一直在关注 openpyxl here 的文档,并希望在新工作簿中创建一个命名范围,并尝试使用它并了解它是如何工作的。遗憾的是,我遇到了一个错误,我不确定这个错误是什么意思。

下面是代码:

import openpyxl

# create workbook
wb = openpyxl.Workbook() 

# create named range
new_range = openpyxl.workbook.defined_name.DefinedName('newrange',attr_text='Sheet$A:$A')
wb.defined_names.append(new_range)

list(wb.defined_names['newrange'].destinations)

这里是错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in 
      2 new_range = openpyxl.workbook.defined_name.DefinedName('newrange',attr_text='Sheet$A:$A')
      3 wb.defined_names.append(new_range)
----> 4 list(wb.defined_names['newrange'].destinations)

~/.local/lib/python3.8/site-packages/openpyxl/workbook/defined_name.py in destinations(self)
    138                 if part.subtype == "RANGE":
    139                     m = SHEETRANGE_RE.match(part.value)
--> 140                     sheetname = m.group('notquoted') or m.group('quoted')
    141                     yield sheetname, m.group('cells')
    142 

AttributeError: 'NoneType' object has no attribute 'group'

有什么想法吗?遍历生成器会出现相同的错误。

根据 docs:

my_range = wb.defined_names['my_range']
# if this contains a range of cells then the destinations attribute is not None
dests = my_range.destinations # returns a generator of (worksheet title, cell range) tuples

这意味着 destinations 将 return 生成一个范围。但是,您给出的范围 returns None 使其成为 NoneType。因此,您没有给出合适的范围,或者不包含单元格区域的范围。

已解决。问题是缺少“!”:

    new_range = openpyxl.workbook.defined_name.DefinedName('newrange',attr_text='Sheet$A:$A')

应该是:

    new_range = openpyxl.workbook.defined_name.DefinedName('newrange',attr_text='Sheet!$A:$A')