У меня есть рабочий код, но навсегда требуется прокрутить около 35 файлов .xlsx, прочитать значения в столбце J (включая сравнение значений ячеек со словарем), а затем выполнить некоторые сравнения.Python openpyxl loop через excel файлы в папке
В принципе, это система уведомлений по электронной почте, в которой: а) находит имя человека в ячейке где-то в столбце J, а затем проверяет дату его смещения в столбце A. Если дата в столбце A - один день в будущем (завтра) он отправляет этому человеку электронное письмо с напоминанием.
Удивление, если кто-то захочет предоставить некоторую обратную связь! У меня есть ощущение, что несколько fors и if's замедляют его, но недостаточно опыты, чтобы знать, как его улучшить.
Спасибо за любой ввод! Иногда даже небольшой намек обычно дает мне достаточно информации для самостоятельного решения решения.
try:
for i in os.listdir(os.chdir(thisdir)):
if i.endswith(".xlsx"):
workbook = load_workbook(i, data_only=True)
try:
ws = workbook[wsvar]
cell_range = ws['j3':'j110']
for row in cell_range: # This is iterating through rows 1-7
for cell in row: # This iterates through the columns(cells) in that row
if cell.value:
if cell.offset(row=0, column =-9).value.date() == (datetime.now().date() + timedelta(days=1)):
for name, email in sublist.items():
#send the emails
if cell.value == name:
email = sublist[cell.value]
datconv = str(cell.offset(row=0, column=-9).value.date().strftime("%m/%d/%Y"))
program = cell.offset(row=0, column=-7).value
#if there are hours in the "hours worked column, use those"
if cell.offset(row=0, column=-5).value:
hours = cell.offset(row=0, column=-5).value
#else, pick up the scheudled hours
else:
hours = cell.offset(row=0, column=-6).value
#SMTP code for email goes here, but it doesn't seem to be the culprit
Уровень гнездования (4 для петель!) У вас есть предположение, что вы должны реорганизовать. Это может помочь вам определить любые горячие точки. Вы также зацикливаете 107 строк, а не 7. –
@CharlieClark Да, я согласен. Мне просто нужно, чтобы «ах-ха!» момент, но у меня недостаточно опыта с a) python и b) openpyxl. И да, забыл обновить мои комментарии, когда я начал перебирать более широкий диапазон. –
Я предлагаю вам переместить это в список рассылки, с ним будет легко помочь с рефакторингом. У вас много повторяющихся звонков, хотя для количества ячеек, которые действительно не имеют значения. –