2016-09-09 2 views
0

У меня есть рабочий код, но навсегда требуется прокрутить около 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 
+0

Уровень гнездования (4 для петель!) У вас есть предположение, что вы должны реорганизовать. Это может помочь вам определить любые горячие точки. Вы также зацикливаете 107 строк, а не 7. –

+0

@CharlieClark Да, я согласен. Мне просто нужно, чтобы «ах-ха!» момент, но у меня недостаточно опыта с a) python и b) openpyxl. И да, забыл обновить мои комментарии, когда я начал перебирать более широкий диапазон. –

+0

Я предлагаю вам переместить это в список рассылки, с ним будет легко помочь с рефакторингом. У вас много повторяющихся звонков, хотя для количества ячеек, которые действительно не имеют значения. –

ответ

0

Я не знаю, если это может помочь, это работает для меня в подобной ситуации, первый я красный и приложил все файлы, которые я имел (3600) в списке, то я цикл их по списку, он работал быстрее.

Удача

+0

Я думал об этом, но тогда мне нужно было бы сравнить два элемента в одном списке. –

Смежные вопросы