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



我有很多格式很奇怪的文件,我正试图创建一个函数,从xlsx文件中删除任何格式。

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

path = r'C:DesktopPythonOpenpyxlFormatted.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检查空单元格

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

@bhaskar是对的。当我试图获得最大列时,我得到的是所有图纸,与第一张图纸的值相同。

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

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

有人知道怎么解决这个问题吗?

提前感谢!

此函数从给定工作表(作为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-样式和命名样式

最新更新