【问题标题】:Alter the style of all cells with openpyxl使用 openpyxl 更改所有单元格的样式
【发布时间】:2014-05-23 13:46:11
【问题描述】:

我将 openpyxl 2.0.3 与 python2.7 一起使用。

有没有办法将样式应用于工作表中的每个单元格?假设我想更改所有单元格的字体,类似于我打开 excel 文档的方式,按 ctrl+a,右键单击并更改格式。

【问题讨论】:

    标签: python excel openpyxl


    【解决方案1】:

    没有办法做到这一点。目前最好的方法可能是为所有相关的列或行设置样式

    style = Style(…)
    for col in 'ABCD':
         ws._styles['A'] = style
    

    我认为我们将在即将发布的版本中改进处理方式。

    【讨论】:

    • 注意:ws._styles 应该索引“col”而不是“A”
    • 嗯?!这个问题当然仍然相关:如何将样式应用于工作表中的每个单元格。事实上,昨天我正在寻找这个问题的答案。此外,可以想象,即使在今天,也有人会拥有类似的软件设置。结论:笔记没有伤害。
    • 该注释依赖于私有 API,由于 OOXML 中实现行和列样式的方式,该 API 不再可用并且无论如何都不会真正起作用。
    【解决方案2】:

    answer 将默认字体分别更改为单个或多个属性的 2 行或 4 行已使此 hack 过时。以下参考资料可用于其他目的。


    我知道这个问题实际上是在更改默认工作表(工作簿?)字体。这与我需要更改默认字体以匹配其他 excel 文档的需求基本相同。关于以单元格或列为基础更改字体有许多类似的问题:

    1. 2011-07-21 - Use openpyxl to edit a Excel2007 file (.xlsx) without changing its own styles?
    2. 2011-12-09 - Setting styles in Openpyxl
    3. 2014-05-23 - Alter the style of all cells with openpyxl
    4. 2017-04-20 - Formatting Fonts and Alignment
    5. 2018-03-07 - How to change font size in Python OpenPyXL
    6. 2018-05-04 - Python Setting Style and Font Size in Excel

    这个技巧是更改默认工作簿字体。显然,API 不支持此功能,但我很乐意覆盖该包。我首先搜索 Calibri,这是我在计算机上不使用的字体:

    ..\openpyxl\styles\__init__.py 中的两行看起来相关:

    from .fonts import Font, DEFAULT_FONT
    from .named_styles import NamedStyle
    

    更改fonts.py

    # Hack default font
    # DEFAULT_FONT = Font(name="Calibri", sz=11, family=2, b=False, i=False,
    DEFAULT_FONT = Font(name="Calibri", sz=10, family=2, b=False, i=False,
                        color=Color(theme=1), scheme="minor")
    

    其他似乎值得一看的地方是:named_styles.pystylesheet.pystyleable.pytheme.pyworkbook.py

    如果有任何建议来整理更改从 __init__.py 调用的 fonts.py 中的常量,我将不胜感激。

    【讨论】:

    • 如何导入DEFAULT_FONT 并使用DEFAULT_FONT.name = "Arial" 之类的内容进行更改?我刚刚做了,它可以工作(openpyxl 3.0.7,Python 3.6)。
    • 太好了,现在看起来效果好多了。请通过一个小演示提供答案。
    • 上述导入在 OpenPyXL 3.0.7、Python 3.9.7 上对我不起作用。我使用from openpyxl.styles import DEFAULT_FONT 取得了成功。之后,改变价值观是小菜一碟。例如。 DEFAULT_FONT.size = 11
    【解决方案3】:

    default font hack show DEFAULT_FONT 类上的 cmets 可以在保存工作簿之前直接导入和设置属性:

    from openpyxl.workbook import Workbook
    from openpyxl.styles import DEFAULT_FONT
    wb = Workbook()
    wb.active['B3'] = "Hello"
    DEFAULT_FONT.name = "Arial"
    wb.save("DemoDefaultFont.xlsx")
    

    同时设置多个属性需要更多。从临时 Font 对象复制属性:

    from openpyxl.workbook import Workbook
    from openpyxl.styles import DEFAULT_FONT
    from openpyxl.styles import Font
    wb = Workbook()
    wb.active['B3'] = "Hello"
    _font = Font(name="Arial", sz=10, b=True)
    {k: setattr(DEFAULT_FONT, k, v) for k, v in _font.__dict__.items()}
    wb.save("DemoDefaultFont.xlsx")
    

    更多详情:https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/fonts.html?highlight=default_font

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多