在Openpyxl中设置样式

我需要在Openpyxl中设置样式的build议。

我看到一个单元格的NumberFormat可以设置,但我也需要设置字体的颜色和属性(粗体等)。 有一个style.py类,但似乎我不能设置单元格的样式属性,我真的不想开始修补openpyxl源代码。

有没有人find这个解决scheme?

从openpyxl版本1.5.7开始,我已经成功应用了以下工作表样式选项…

from openpyxl.reader.excel import load_workbook from openpyxl.workbook import Workbook from openpyxl.styles import Color, Fill from openpyxl.cell import Cell # Load the workbook... book = load_workbook('foo.xlsx') # define ws here, in this case I pick the first worksheet in the workbook... # NOTE: openpyxl has other ways to select a specific worksheet (ie by name # via book.get_sheet_by_name('someWorksheetName')) ws = book.worksheets[0] ## ws is a openpypxl worksheet object _cell = ws.cell('C1') # Font properties _cell.style.font.color.index = Color.GREEN _cell.style.font.name = 'Arial' _cell.style.font.size = 8 _cell.style.font.bold = True _cell.style.alignment.wrap_text = True # Cell background color _cell.style.fill.fill_type = Fill.FILL_SOLID _cell.style.fill.start_color.index = Color.DARKRED # You should only modify column dimensions after you have written a cell in # the column. Perfect world: write column dimensions once per column # ws.column_dimensions["C"].width = 60.0 

仅供参考,您可以在openpyxl/style.pyfind颜色的名称…我有时使用X11颜色名称打补丁

 class Color(HashableObject): """Named colors for use in styles.""" BLACK = 'FF000000' WHITE = 'FFFFFFFF' RED = 'FFFF0000' DARKRED = 'FF800000' BLUE = 'FF0000FF' DARKBLUE = 'FF000080' GREEN = 'FF00FF00' DARKGREEN = 'FF008000' YELLOW = 'FFFFFF00' DARKYELLOW = 'FF808000' 

从openpyxl 2.0开始,样式是不可变的。

如果你有一个cell ,你可以(例如)设置粗体文本:

cell.style = cell.style.copy(font=cell.style.font.copy(bold=True))

是的,这很烦人。

从openpyxl 2.0开始,设置单元格样式是通过创build新的样式对象并将其分配给单元格的属性来完成的。

有几种样式对象: FontPatternFillBorderAlignment 。 看文档 。

要更改单元格的样式属性,首先必须从单元格中复制现有的样式对象并更改属性的值,或者必须使用所需的设置创build新的样式对象。 然后,将新样式对象分配给单元格。

将字体设置为粗体和斜体的示例A1:

 from openpyxl import Workbook from openpyxl.styles import Font # Create workbook wb = Workbook() # Select active sheet ws = wb.active() # Select cell A1 cell = ws['A1'] # Make the text of the cell bold and italic cell.font = cell.font.copy(bold=True, italic=True) 

从openpyxl-1.7.0开始,你也可以这样做:

 cell.style.fill.start_color.index = "FF124191" 

我有几个帮助函数,它们在给定cell上设置样式,比如页眉,页脚等。

像openpyxl doc一样说:

这是一个开源项目,由志愿者在业余时间维护。 这可能意味着您想要缺less的特定function或function。

我查了一下openpyxl的源代码,发现:

直到openpyxl 1.8.x,样式是可变的。 他们的属性可以像这样直接分配:

 from openpyxl.workbook import Workbook from openpyxl.style import Color wb = Workbook() ws = wb.active ws['A1'].style.font.color.index = Color.RED 

但是从openpyxl 1.9开始,样式是不可变的。

样式在对象之间共享,一旦被分配,就不能被改变。 这可以阻止不必要的副作用,例如改变大量单元格的样式,而不是只改变一个样式。

要创build一个新的样式对象,可以直接赋值,也可以使用新的属性复制现有单元格的样式,回答这个问题作为例子(原谅我的中文英文):

 from openpyxl.styles import colors from openpyxl.styles import Font, Color from openpyxl import Workbook wb = Workbook() ws = wb.active a1 = ws['A1'] d4 = ws['D4'] # create a new style with required attributes ft_red = Font(color=colors.RED) a1.font = ft_red # you can also do it with function copy ft_red_bold = ft_red.copy(bold=True) # you can copy from a cell's style with required attributes ft_red_sigle_underline = a1.font.copy(underline="single") d4.font = ft_red_bold # apply style to column E col_e = ws.column_dimensions['E'] col_e.font = ft_red_sigle_underline 

单元格样式包含这些属性:字体,填充,边框,alignment,保护和number_format。 检查openpyxl.styles

他们是相似的,应该被创build为一个对象,除了number_format,它的值是stringtypes。

一些预定义的数字格式是可用的,数字格式也可以在stringtypes中定义。 检查openpyxl.styles.numbers

 from openpyxl.styles import numbers # use pre-defined values ws.cell['T49'].number_format = numbers.FORMAT_GENERAL ws.cell(row=2, column=4).number_format = numbers.FORMAT_DATE_XLSX15 # use strings ws.cell['T57'].number_format = 'General' ws.cell(row=3, column=5).number_format = 'd-mmm-yy' ws.cell['E5'].number_format = '0.00' ws.cell['E50'].number_format = '0.00%' ws.cell['E100'].number_format = '_ * #,##0_ ;_ * -#,##0_ ;_ * "-"??_ ;_ @_ ' 

对于openpyxl 2.4.1及以上版本,使用下面的代码来设置字体颜色:

 from openpyxl.styles import Font from openpyxl.styles.colors import Color ws1['A1'].font = Font(color = "FF0000") 

hex代码的各种颜色可以在这里find: http : //dmcritchie.mvps.org/excel/colors.htm