openpyxl - 写入以等号 ('=') 开头的字符串

openpyxl - Write string beginning with equals ('=')

我正在从数据库中提取一些随机文本字符串,并使用 openpyxl 将它们写入 xlsx 文件。一些字符串恰好以等号开头(类似于“=134lj9adsasf&^”)这导致了 Excel 试图将其解释为公式并将其显示为“#NAME?”的问题。由于错误。

在 Excel 本身,我可以通过在写入字符串之前将单元格格式从常规格式更改为文本格式来避免此问题。我尝试使用 openpyxl 来执行此操作,但没有任何区别。当我打开生成的电子表格时,它确实显示单元格具有文本格式,但它仍然显示错误。我该如何解决这个问题?

下面是一个工作示例。当我打开 Excel 中的文件时,它显示 #NAME?对于第三个单元格。然而,如果我只是 select 单元格并键入“=abc?123”(不带引号),Excel 会毫无问题地接受文本。

import openpyxl
from openpyxl.cell.cell import Cell

stringList = [("abc","123","=abc?123","ok")]
wb = openpyxl.Workbook()
ws = wb.create_sheet('Sheet1')
for row in stringList:
    ws.append(row)
    for idx, cell in enumerate(ws[ws.max_row]):
        cell.number_format = '@'  # Set all cells to text format to avoid issue with =
        cell.value = str(row[idx]) # Re-write data
wb.save("filename.xlsx")

我明白了。只需要更改 data_type 而不是 number_format.

以等号开头的字符串的 data_type 设置为 'f'。

for row in stringList:
    ws.append(row)
    for cell in ws[ws.max_row]:
        if cell.data_type == 'f':
            cell.data_type = 's'