Сократить количество кода

Доброго времени суток Уважаемые форумчане! Помогите пожалуйста советом. Начал изучение openpyxl и не могу понять как мне сократить количество блоков в коде. У меня есть документ excel, в котором две страницы. Одна из них - это данные, вторая представляет из себя документ, в который в зависимости от даты должны подставляться значения и документ должен идти на печать. Собственно, что у меня получилось

wb = load_workbook(filename='Расчет.xlsx')
ws = wb['sheet1']
ws2 = wb['sheet2']
sheet2 = wb.active

ws2['D8'].value = ws['A7'].value
ws2['W20'].value = ws['B7'].value
ws2['W56'].value = ws['C7'].value
ws2['X44'].value = ws['E7'].value
ws2['X46'].value = ws['D7'].value
ws2['X48'].value = ws['F7'].value
ws2['X52'].value = ws['Q7'].value


target = wb.copy_worksheet(from_worksheet=sheet2)
ws2['D8'].value = ws['A8'].value
ws2['W20'].value = ws['B8'].value
ws2['W56'].value = ws['C8'].value
ws2['X44'].value = ws['E8'].value
ws2['X46'].value = ws['D8'].value
ws2['X48'].value = ws['F8'].value
ws2['X52'].value = ws['Q8'].value

и таких блоков 30!!!


Ответы (1 шт):

Автор решения: day383
k1 = ['D8','W20','W56','X44','X46','X48','X52']
k0 = ['A', 'B', 'C', 'E', 'D', 'F', 'Q']

second_ks = []
col = 7
# заполняет second_ks столбцами 
# ['A7','B7',...] ['A8','B8',...] ... ['A36','B36',...]
for i in range(30):
    k = [a + str(col) for a in k0]
    second_ks.append(k)
    col += 1

# zip возвращает пары ключей: ('D8','A7') ('W20','B7') ...
for k2 in second_ks:
    for i, j in zip(k1, k2):
        ws2[i].value = ws[j].value
→ Ссылка