使用空字符串而不是使用Python保存Nonetype

问题描述 投票:0回答:2

我有多个带有空单元格的 .xlsx 文件,我需要使用空字符串。当我手动执行此操作时,我只是在每个单元格中添加一个单引号,这使单元格保持为空,但将其设置为字符串。我想用 python (和 openpyxl 模块)自动化这个过程,但我不能完全正确。我尝试输入空字符串和输入单引号,但由于不同的原因都失败了。

这是我的第一次尝试:

...
for row in range(2, sheet.max_row + 1):
    for column in range(1, sheet.max_column + 1):
        cell = sheet.cell(row=row, column=column)

        # fixes cells with no value
        if cell.value == None:
            cell.value = ''
...
wb.save('new_file_name.xlsx')

在保存之前的运行过程中,值的类型为 NoneType 并且已成功更改为 str,但保存函数创建的新文件已将空字符串恢复为空单元格,即使是我手动执行的操作也是如此。

我的第二次尝试是插入单引号:

...
for row in range(2, sheet.max_row):
    for column in range(1, sheet.max_column):
        cell = sheet.cell(row=row, column=column)

        # fixes cells with no value
        if cell.value == None:
            cell.value = '\''
...
wb.save('new_file_name.xlsx')

此尝试生成了一个 Excel 文件,其中每个空单元格都被单引号替换,但引号仍然显示,这与手动插入单引号不同,这意味着它不是空的。

有没有办法在 excel 中使用 python 将空单元格定义为字符串?

python excel openpyxl
2个回答
0
投票

在官方问题跟踪器这里“讨论”这个问题之后,我得到的最接近的解决方案是:

  • 写入文件时 - 不要保存空字符串,而是保存 Excel 计算结果为空字符串的公式

    =""
    。这对于我的用例来说已经足够好了。我希望它也适合你。

    如果我理解你的确切用例,你真正需要的是(假设你正在加载 data_only=False,默认值):

    if cell.value == '': # this catches empty strings created by typing ' in the formula
        cell.value = '=""'
    

    请注意,编写公式时,openpyxl 不会计算它们,因此如果您打算稍后使用 data_only=True 加载此文件,则必须首先在 Excel 中打开该文件并保存。或者,您也可以使用 data_only=False 加载它,并使用

    =""
    公式检查单元格。

  • 阅读文件时 - 最好的选择是同时加载工作簿

    data_only
    =
    True
    False
    。在两个加载的工作簿中,空单元格的
    .value
    字段将是
    None
    。包含空字符串值的单元格应始终具有生成空字符串的公式(即使该公式是空字符串,就像您在 Excel 公式栏中键入 ' 时的情况一样)。

.data_type
字段还为您提供有关单元格中存储内容的有用信息。

一般来说,您应该参考我用一些常见用例制作的表,该表显示了加载和保存工作簿时数据如何更改(丢失):


-3
投票

也许可以使用

if x is None
? 我认为 NoneType 对象有点特殊,所以 == 不起作用。 也许检查一下真正的python

© www.soinside.com 2019 - 2024. All rights reserved.