Openpyxl - 从 Excel 文件中的所有工作表中删除格式

Posted

技术标签:

【中文标题】Openpyxl - 从 Excel 文件中的所有工作表中删除格式【英文标题】:Openpyxl - Remove formatting from all sheets in an Excel file 【发布时间】:2020-09-21 13:01:55 【问题描述】:

我有很多格式奇怪的文件,我正在尝试创建一个函数来删除 xlsx 文件中的所有格式。

这里的一些人建议使用“cell.fill = PatternFill(fill_type=None)”来清除给定单元格中的任何格式。

path = r'C:\Desktop\Python\Openpyxl\Formatted.xlsx
wb = xl.load_workbook(filename = path)

def removeFormatting(file):
    ws = wb[file]
    
    for row in ws.iter_rows():
        for cell in row:
            if cell.value is None:
                cell.fill = PatternFill(fill_type=None)

    wb.save(path)

for s in wb.sheetnames:
    removeFormatting(s)

但这不会改变任何事情。如果单元格是空的但有颜色,那么 openpyxl 仍然认为它们是非空的。

在这篇文章之后: Openpyxl check for empty cell

ws.max_column 和 ws.max_row 的问题是它也会计算空白列,从而达不到目的。”

@bhaskar 是对的。 当我尝试获取最大列时,我得到了所有工作表的值,与第一张工作表的值相同。

col = []    
for sheet in wb.worksheets:
        col.append(sheet.max_column)

因此,即使有不同的工作表尺寸,如果单元格具有背景颜色或任何其他格式,它也会将其视为有效的非空单元格。

有人知道怎么解决吗?

提前致谢!

【问题讨论】:

只需将默认样式分配给每个单元格。 @CharlieClark 你能澄清一下吗?我认为执行循环确实覆盖了工作表中的所有单元格。默认样式是什么样的? 无论你想要什么,但使用命名样式是最快的方法。不用担心细胞是否存在。 @CharlieClark 非常抱歉,您能给我举个例子吗? @CharlieClark 如何指定默认样式? 【参考方案1】:

此函数从给定工作表中的所有单元格中删除样式(作为ws 对象传递)。 因此,您可以打开文件,遍历所有工作表并将此函数应用于每个工作表:

def removeFormatting(ws):
    # ws is not the worksheet name, but the worksheet object
    for row in ws.iter_rows():
        for cell in row:
            cell.style = 'Normal'

如果您还想查看有关如何定义和应用命名样式的信息,请查看此处: https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles-and-named-styles

【讨论】:

以上是关于Openpyxl - 从 Excel 文件中的所有工作表中删除格式的主要内容,如果未能解决你的问题,请参考以下文章

用python将两个excel文件中的所有工作表复制到一个新的excel?

使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容

如何使用 Python 读取包含扩展字体的 Excel 文件? (openpyxl 错误:最大值为 14)

通过Python openpyxl库对excel进行操作

通过Python openpyxl库对excel进行操作

将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)