我是一名老师,我正在制作一个程序,以方便自己对我的学生进行分类。等级。这不是一个很大的问题,这笔交易是,我主要是为了练习编程。
# Name the first line
sheet['A1'] = 'Index'
sheet['B1'] = 'Name'
sheet['C1'] = 'Grade'
# Changes the style of the first line to bold
sheet['A1'].font = font_bold
sheet['B1'].font = font_bold
sheet['C1'].font = font_bold
# Widens the columns
sheet.column_dimensions['A'].width = 10
sheet.column_dimensions['B'].width = 30
sheet.column_dimensions['C'].width = 30
# Aligns to center
sheet.cell('A1').alignment = Alignment(horizontal='center', vertical='center')
sheet.cell('B1').alignment = Alignment(horizontal='center', vertical='center')
sheet.cell('C1').alignment = Alignment(horizontal='center', vertical='center')
# Freeze the first row
sheet.freeze_panes = 'A2'
# Index number of the lines
i = 2
--
--
# function to calculate the grade
def grade():
正如您可能注意到的那样,在某种程度上,这一切都是重复的。代码完全按照我的意愿运行,但我想知道一些其他的方法来使它更多... succint。
记住变量达到是很重要的,因为接下来一个函数将开始,并且很快就会出现While
循环。
---
省略了此问题代码的不相关部分。如果他们以某种方式需要我会编辑它们,但据我所知,它们不是。
提前谢谢。
答案 0 :(得分:2)
通常,只要你有一些相同长度的并行数组保留一些相关的属性,就可以很好地指示你可以组合这些属性并从中创建一个对象。 对于您的情况,我看到建议使用以下属性定义对象表:
答案 1 :(得分:1)
这是一个好的开始:
items = [
{"sheet": "A1", "column": "A", "column_width": 10, "title": "Index"},
{"sheet": "B1", "column": "B", "column_width": 30, "title": "Name"},
{"sheet": "C1", "column": "C", "column_width": 30} "title": "Grade"},
]
for item in items:
sheet[item["sheet"]] = item["title"]
sheet[item["sheet"]].font = font_bold # always bold
sheet.column_dimensions[item["column"]] = item["column_width"] # shared value
sheet.cell(item["sheet"]).alignment = Alignment(horizontal='center', vertical='center') # shared value
答案 2 :(得分:1)
我会把整个事情分解成函数。
def name_column(cell, name):
sheet[cell] = name
def style_name_column(cell, style):
sheet[cell].font = style
def change_width(column, width):
sheet.column_dimensions[column].width = width
def align_column(cell):
sheet.cell(cell).alignment = Alignment(horizontal='center', vertical='center')
然后使用某种数据结构来循环并执行此操作。
indexes_and_names = [['A1','Index']
['B1','Name' ]
['C1','Grade']]
for item in indexes_and_names:
name_column(item[0], item[1])
然后重复其他功能,或使用更大的数据结构,如杰克的字典。
您的代码将易读且易于维护。
答案 3 :(得分:0)
openpyxl提供了所有必要的功能,可以快速轻松地完成此任务。最好的方法是使用named styles。您可以为标题单元格创建单个样式,并使用循环来应用它。
创建第一行:
ws.append(['Index', 'Name', 'Grade'])
创建相关风格:
header = NamedStyle(…)
将样式应用于第一行:
for cell in ws[1]:
cell.style = header