【发布时间】: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 如何指定默认样式?