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

时间:2020-09-21 13:01:55

标签: python excel openpyxl

我的文件格式很奇怪,我正在尝试创建一个函数来删除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是正确的。 当我尝试获取max列时,我得到的所有表都与第一张表的值相同。

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

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

有人知道如何解决吗?

谢谢!

1 个答案:

答案 0 :(得分: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