2016-08-17 1 views
0

Ich habe den folgenden Code, der nicht leere Werte in Spalte J eines Excel-Arbeitsblattes findet. Es macht einige Dinge damit, einschließlich das Abrufen der E-Mail-Adresse des Werts in Spalte K. Dann sendet es eine E-Mail an das Mitglied mit SMTP.Suchen Sie Listenelemente in Excel-Tabelle mit Python

Was ich stattdessen möchte, ist die E-Mail-Adresse der Person aus einer Python-Liste, die am Anfang des Codes deklariert werden kann. Ich kann einfach nicht herausfinden, wie man die übereinstimmenden Namen in Spalte J im Arbeitsblatt nach der Liste findet und dann die resultierende E-Mail-Adresse aus der Liste erhält.

Bitte entschuldigen Sie jede schreckliche Syntax ... Dies ist mein erster Stich in einem großen Python-Projekt.

memlist = {'John Frank':'[email protected]', 
      'Liz Poe':'[email protected]'} 

try: 
    for i in os.listdir(os.getcwd()): 
     if i.endswith(".xlsx") or i.endswith(".xls"): 
      workbook = load_workbook(i, data_only=True) 

     ws = workbook.get_sheet_by_name(wsinput) 
     cell_range = ws['j3':'j7'] 
     for row in cell_range: # This is iterating through rows 1-7 
       #for matching names in memlist 
       for cell in row: # This iterates through the columns(cells) in that row 
        value = cell.value 
        if cell.value: 
         if cell.offset(row=0, column =-9).value.date() == (datetime.now().date() + timedelta(days=7)): 
          #print(cell.value) 
          email = cell.offset(row=0, column=1).value        
          name = cell.value.split(',',1)[0] 

Antwort

0

Dies ist mein Versuch auf eine Antwort.

memlist ist kein list, sondern ein dict, weil es key : value Paare enthält. Wenn Sie überprüfen möchten, ob ein bestimmter Schlüssel in einer dict existiert, können Sie die Methode dict.has_key(key) verwenden.

In memlist ist der Name der key und die entsprechende E-Mail ist die value.

In Ihrem Code, könnten Sie dies tun:

if memlist.has_key(cell.value): # For Python 2 
    if ... # From your code 
     email = memlist[cell.value] 

Falls Sie Python verwenden 3 können Sie für den Schlüssel wie folgt suchen:

if cell.value in memlist: # For Python 3 

Sehen Sie, wenn dies für funktioniert Sie, da ich Ihre Frage nicht vollständig verstehen konnte.

+0

Ich benutze Python 3.5 so glaube ich, dass die has_key nicht funktioniert. –

0

Shubham, Ich habe einen Teil Ihrer Antwort verwendet, um meine eigene Antwort zu finden. Anstelle der has_key-Methode habe ich einfach eine andere for/in-Anweisung mit einer nachfolgenden if-Anweisung verwendet.

Meine Angst ist jedoch, dass mit diesen mehreren For und If, der Code eine lange Zeit braucht, um zu laufen und vielleicht nicht die effizienteste/optimal. Aber das ist einen weiteren Tag wert.

try: 
for i in os.listdir(os.getcwd()): 
    if i.endswith(".xlsx") or i.endswith(".xls"): 
     workbook = load_workbook(i, data_only=True) 

     ws = workbook.get_sheet_by_name(wsinput) 
     cell_range = ws['j3':'j7'] 
     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 
        value = cell.value 
        if cell.value: 
         if cell.offset(row=0, column =-9).value.date() == (datetime.now().date() + timedelta(days=7)): 
          for name, email in memlist.items(): 
           if cell.value == name: 
            #send the email 
Verwandte Themen