首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Openpyxl -从Excel文件中的所有工作表中删除格式

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

Stack Overflow用户
提问于 2020-09-21 13:01:55
回答 1查看 4K关注 0票数 1

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

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

代码语言:javascript
运行
复制
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是对的。当我试图得到的最大列,我得到所有的纸张,相同的值,从第一个工作表。

代码语言:javascript
运行
复制
col = []    
for sheet in wb.worksheets:
        col.append(sheet.max_column)

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

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

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 23:48:47

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

代码语言:javascript
运行
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63992822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档