openpyxl:Linter 坚持认为单元格已合并

openpyxl: Linter insists that cell is merged

所以我从我的 类:

中摘录了一段
def write_wb(self,filename: str):
    """Write the workbook to filename. """
    #This lets us defer excel ops until the end
    headers = ["Path","File","Type","Description","Link"]
    wb = openpyxl.Workbook()
    wb.active.append(headers)
    for elem in self._internal_array:
        wb.active.append([elem.path,
                          elem.name,
                          elem.type.name,
                          ''])
        linkcell = wb.active.cell(row=wb.active.max_row,column=5)
        linkcell.value = "1" #This line has the error
        linkcell.style = "Hyperlink"
        linkcell.font  = Font(underline="single")

我的 linter (pylance) 一直抱怨以下内容:

Cannot assign member "value" for type "MergedCell" Expression of type "Literal['1']" cannot be assigned to member "value" of class "MergedCell" Type cannot be assigned to type

鉴于我在第 5 行创建了工作簿,我可以在编译时保证该单元格永远不会成为 MergedCell 或 ReadOnlyCell。发生了什么事以及如何让我的 linter 开心?

诀窍是在对 append 的调用中包含您的自定义单元格。此代码有效:

for elem in self._internal_array:
    linkcell = openpyxl.cell.Cell(wb.active,
               value=f'=HYPERLINK("{elem.link}")' if elem.link else '') 
    linkcell.style = "Hyperlink"
    wb.active.append([elem.path,
                      elem.name,
                      elem.type.name,
                      '',
                      linkcell])

错误源于 Pylance 无法确定对 wb.active.cell 的调用不会 return 无效单元格这一事实,因此它对未来代码应用了所有可能的限制。