【发布时间】:2014-05-23 13:46:11
【问题描述】:
我将 openpyxl 2.0.3 与 python2.7 一起使用。
有没有办法将样式应用于工作表中的每个单元格?假设我想更改所有单元格的字体,类似于我打开 excel 文档的方式,按 ctrl+a,右键单击并更改格式。
【问题讨论】:
我将 openpyxl 2.0.3 与 python2.7 一起使用。
有没有办法将样式应用于工作表中的每个单元格?假设我想更改所有单元格的字体,类似于我打开 excel 文档的方式,按 ctrl+a,右键单击并更改格式。
【问题讨论】:
没有办法做到这一点。目前最好的方法可能是为所有相关的列或行设置样式
style = Style(…)
for col in 'ABCD':
ws._styles['A'] = style
我认为我们将在即将发布的版本中改进处理方式。
【讨论】:
answer 将默认字体分别更改为单个或多个属性的 2 行或 4 行已使此 hack 过时。以下参考资料可用于其他目的。
我知道这个问题实际上是在更改默认工作表(工作簿?)字体。这与我需要更改默认字体以匹配其他 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.py、stylesheet.py、styleable.py、theme.py 和 workbook.py。
如果有任何建议来整理更改从 __init__.py 调用的 fonts.py 中的常量,我将不胜感激。
【讨论】:
DEFAULT_FONT 并使用DEFAULT_FONT.name = "Arial" 之类的内容进行更改?我刚刚做了,它可以工作(openpyxl 3.0.7,Python 3.6)。
from openpyxl.styles import DEFAULT_FONT 取得了成功。之后,改变价值观是小菜一碟。例如。 DEFAULT_FONT.size = 11
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
【讨论】: