/ / Dwa warunki testu if w arkuszu Excel, przy użyciu xlrd - python, excel, if-statement, xlrd

Dwa warunki testu na arkuszu programu Excel, używając xlrd - python, excel, if-statement, xlrd

Wyodrębniam dane z pliku Excel przy użyciu następującego kodu:

for row in range(sheet.nrows):                      # For-loop, for all rows
for col in range(sheet.ncols):     # For-loop, for all columns
if((re.match(r"Fd-w*",str(sheet.cell(row,col).value))) and str(sheet.cell(row+2,col).value)!=None):            # If cell starts with F(number)-(several word chars) AND if cell two rows below this is not empty
works2.write(num_row+1,num_col,(sheet.cell(row,col)).value)
works2.write(num_row, num_col,(sheet.cell(row-2,col)).value
ect...

Ten kod działał ładnie, dopóki nie dodałem drugiego warunku do testu if. Nie chcę, żeby kod czytał w czymkolwiekkolumny, w których nie ma danych, tj. drugi warunek testu if. Obecnie jednak drugi test if nic nie robi i wciąż czytam w kilku pustych kolumnach danych. Czy ktoś może mi pomóc wykryć mój błąd / ewentualnie ponownie sformułować mój drugi test if, aby sprawdzić, czy komórka 2 wiersze pod komórką (wiersz, kolumna) jest pusta i wprowadza polecenia pod testem if, jeśli nie jest?

Przepraszamy za zadawanie tak podstawowych pytań. Po prostu nie mogę tego zrobić tak, jak chcę ...

Odpowiedzi:

1 dla odpowiedzi № 1

Drugi warunek jest niewłaściwy, w rzeczywistości robisz -

str(sheet.cell(row+2,col).value)!=None)

Konwertujesz wynik sheet.cell(row+2,col).value na ciąg, jeśli jest None wynik str(sheet.cell(row+2,col).value) będzie ciąg "None" i to nigdy nie będzie równe None , nigdy nie dostaniesz None wyjście z str() . I dlatego zachowuje się tak, jakby warunek nigdy nie istniał.

Powinieneś spróbować -

if (re.match(r"Fd-w*",str(sheet.cell(row,col).value))) and sheet.cell(row+2,col).value not in [None, ""]:

W tym nowym stanie będzie działać poprawnie dla obu sheet.cell(row+2,col).value istota None .