python - 使用openpyxl填充颜色的单元格

Ahm*_*had 34 python openpyxl

我目前正在使用openpyxl v2.2.2 for Python 2.7,我想将颜色设置为单元格.我使用了以下导入

import openpyxl,
from openpyxl import Workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles import colors
from openpyxl.cell import Cell
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用的代码:

wb = openpyxl.Workbook()
ws = wb.active

redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')

ws['A1'].style = redFill
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Traceback (most recent call last)
  self.font = value.font.copy()
AttributeError: 'PatternFill' object has no attribute 'font'
Run Code Online (Sandbox Code Playgroud)

关于如何使用openpyxl设置单元格A1(或任何其他单元格)的任何想法?

Cha*_*ark 41

我认为问题在于您正在尝试将填充对象分配给样式.

ws['A1'].fill = redFill 应该工作正常.

  • 是否可以将其应用于选定的列 IE A1:A5? (4认同)
  • 谢谢查理.我对Python很新,而openpyxl文档并不清楚如何将填充应用于单元格.你的答案解决了这个问题. (3认同)

ldr*_*drg 12

样式的 API 再次更改。对我有用的是

my_red = openpyxl.styles.colors.Color(rgb='00FF0000')
my_fill = openpyxl.styles.fills.PatternFill(patternType='solid', fgColor=my_red)
cell.fill = my_fill
Run Code Online (Sandbox Code Playgroud)

颜色是 alpha RGB 十六进制颜色。您可以将其作为'rrggbb'默认 alpha 值 00传入或使用'aarrggbb'. openpyxl.styles.colors如果您需要快速获取一个颜色,则将一堆颜色定义为常量。


M T*_*ead 6

这对我有用.他们改变了一些东西,你在网上看到的大部分帮助都是我所看到的openpyxl库的旧版本.

# Change background color 
xls_cell.style = Style(fill=PatternFill(patternType='solid',
                                        fill_type='solid', 
                                        fgColor=Color('C4C4C4')))
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的事情.如果对单元格进行多项更改,则会使用最新更改删除以前的更改.如果要进行6次更改,则必须在同一命令中执行所有6次更改.你不能一个一个地改变它们.如果您只做最后一次更改将保持不变. (2认同)

小智 6

在 python 3.x 中

wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')
ws['A1'].fill = redFill
Run Code Online (Sandbox Code Playgroud)

那个工作,但我不知道在 python 2.xi 希望工作只是把 ws['A1'].fill=redFill


小智 6

from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill

_file_name = "Test.xlsx"
_sheet_name = "Test_Sheet"

def new_workbook(_file_name, _sheet_name):
    wb = Workbook()  # Workbook Object
    ws = wb.active  # Gets the active worksheet
    ws.title = _sheet_name  # Name the active worksheet

    # Writing the header columns
    ws['A1'] = 'Name'
    ws['B1'] = 'Class'
    ws['C1'] = 'Section'
    ws['D1'] = 'Marks'
    ws['E1'] = 'Age'
    

    col_range = ws.max_column  # get max columns in the worksheet

    # formatting the header columns, filling red color
    for col in range(1, col_range + 1):
        cell_header = ws.cell(1, col)
        cell_header.fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type="solid") #used hex code for red color

    wb.save(_file_name)  # save the workbook
    wb.close()  # close the workbook

if __name__ == '__main__':
    new_workbook(_file_name, _sheet_name)
Run Code Online (Sandbox Code Playgroud)

结果 -在此输入图像描述


小智 5

我会为 Excel 做的是这样的:

from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill

wb = load_workbook("test.xlsx")
ws = wb.active

ws["A1"].fill = PatternFill("solid", start_color="FFA500")
Run Code Online (Sandbox Code Playgroud)

您可以将“A1”替换为另一个单元格,并且 start_color 必须是十六进制颜色。