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 无效单元格这一事实,因此它对未来代码应用了所有可能的限制。
所以我从我的 类:
中摘录了一段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 无效单元格这一事实,因此它对未来代码应用了所有可能的限制。