使用openpyxl更改所有单元格样式

13 投票
2 回答
14563 浏览
提问于 2025-04-18 07:24

我正在用python2.7和openpyxl 2.0.3这个库。

有没有办法给工作表里的每个单元格都加上样式?比如说,我想把所有单元格的字体都改一下,就像我打开一个Excel文档,按下ctrl+a全选,然后右键点击更改格式那样。

2 个回答

6

更新:评论中提到,现在可以直接导入 DEFAULT_FONT 类,并在保存工作簿之前直接设置属性:

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

4

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

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

我觉得我们会在接下来的版本中改进样式的处理。

撰写回答