在OpenPyxl中更改一行或一列的样式

恐龙

我已经从NamedStyle切换为常规样式,这似乎对我来说更好。现在,我只是想尝试填充一行和一列-我有一些过度设计的位有效,但我很好奇为什么colA位不行。给我一个AtrributeError。

import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import PatternFill, Border, Side, Alignment

wb = openpyxl.load_workbook('example5.xlsx')
sheet = wb['Sheet1']

day = ''
week = ('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY',
        'FRIDAY', 'SATURDAY', 'SUNDAY')

sheet['A2'] = 'Monday'
sheet['A3'] = 'Tuesday'
sheet['A4'] = 'Wednesday'
sheet['A5'] = 'Thursday'
sheet['A6'] = 'Friday'
sheet['A7'] = 'Saturday'
sheet['A8'] = 'Sunday'

sheet['A1'] = 'Day'
sheet['B1'] = 'In'
sheet['C1'] = 'Out'
sheet['D1'] = 'Total Hours'
sheet['E1'] = 'ST Hours'
sheet['F1'] = 'OT Hours'
sheet['G1'] = 'ST Rate'
sheet['H1'] = 'OT Rate'


while day not in week:
    day = input('What day of the week is it? ')
    day = day.upper()


def sheetStyle(var):
    sheet['B' + var].number_format = 'H:MM AM/PM'
    sheet['F' + var].number_format = 'H:MM AM/PM'
    sheet['C' + var].number_format = 'H:MM AM/PM'
    sheet['E' + var].number_format = 'General'
    sheet['F' + var].number_format = '#,##0.00'
    sheet['G' + var].number_format = '[$$]#,##0.00'
    sheet['H' + var].number_format = '[$$]#,##0.00'
    sheet['B' + var] = input('Enter the time you clocked in: ')
    sheet['C' + var] = input('Enter the time you clocked out: ')
    sheet['D' + var] = '=MOD(C' + var + '-B' + var + ',1)*24'
    sheet['E' + var] = '=D' + var + '-F' + var
    sheet['F' + var] = '=MAX(D' + var + '-8,0)'
    sheet['G' + var] = '=E' + var + '*15'
    sheet['H' + var] = '=F' + var + '*22.5'


def sheetInput(day=''):
    for i, w in enumerate(week):
        if day == w:
            sheetStyle(str(i + 2))


grayFill = PatternFill(start_color='D0CECE', end_color='D0CECE',
                       fill_type='solid')
whiteFill = PatternFill(start_color='FFFFFF', end_color='FFFFFF',
                        fill_type='solid')

for columns in sheet.iter_cols(min_col=None, max_col=None,
                               min_row=None, max_row=None):
    for cell in columns:
        cell.fill = grayFill

# for row in sheet.iter_rows(min_row=None, max_col=1, max_row=8):
#    for cell in row:
#        cell.fill = whiteFill

# for cell in sheet[1:1]:
#    cell.fill = whiteFill

colA = sheet['A']
colA.fill = whiteFill

column = 1
while column < 9:
    col = get_column_letter(column)
    sheet.column_dimensions[col].width = 20
    column += 1

for d in week:
    if d == day:
        sheetInput(day)

wb.save('example5.xlsx')

这是错误:

Traceback (most recent call last):

  File "<ipython-input-59-275cd7bf6699>", line 1, in <module>
    runfile('D:/Users/D/Desktop/Python/hello.py', wdir='D:/Users/D/Desktop/Python')

  File "C:\Users\D\AppData\Local\conda\conda\envs\test_env\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\Users\D\AppData\Local\conda\conda\envs\test_env\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "D:/Users/D/Desktop/Python/hello.py", line 84, in <module>
    colA.fill = whiteFill

AttributeError: 'tuple' object has no attribute 'fill'
查理·克拉克(Charlie Clark)

错误很明显:您正在尝试将样式应用于列。为方便起见,openpyxl提供了行和列,但这些始终是您需要循环的单元格的集合。

for cell in ws['A']:
    cell.fill = whiteFill

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一列中的另一行更改一行的值

列中的条件值以更改另一列的同一行中的值

更改每一行中第一列的innerhtml

创建一列,为另一行中的更改增加值

复制data.table中每个组的最后一行,并更改一列的值

一列或一行中的多列数据

从空列递增一列中的一行

更新每一行中的一列

使用 dplyr 修改一列中的一行

计算一行中的一列等于另一行中的另一列

更改表格中第一行的样式

openpyxl 将列变成一行

如何检查一列的值是否在另一行的另一列中

从每一行的另一列中减去一列的内容

Excel(GoogleSpreadsheet):我想匹配一列中的文本并更改同一行的其他列

在同一行中设置不同宽度的列的样式

是否可以根据列值复制一行并更改另一列值?

如何从组中获取列中的第一行和另一列中的最后一行

在 VBA 中,一维数组是一行、一列还是任何一个?

获取上一行中列的值,并添加到下一行中的下一列

如何从一列中的动态最后一行填充到相邻列中的最后一行?

Pyspark:将一列中的值与另一列中同一行中的列表进行匹配

复制每一行并将一列更改为二进制值

使用dplyr从R数据帧的最后一列最后一行更改值

结果列表是一行而不是一列,如何更改?

在更改行值后,将另一行加到另一列

如何使用一列查找行并在另一列中返回同一行的值

R - 根据另一列中的另一行向下填充一列的行

如何在 HTML/CSS 中嵌套一列一行和一列两行