/ / Openpyxl: odczytanie danych z arkusza kalkulacyjnego w zakresie kolumn - python, python-3.x, openpyxl

Openpyxl: odczytaj dane arkusza kalkulacyjnego w zakresie kolumn - python, python-3.x, openpyxl

Witaj Próbuję odczytać dane z arkusza kalkulacyjnegow zakresie, który obejmuje wiersz od 2 do 5 i jest zgodny z kolejnością kolumn, ale ciągle dostaję błąd, mówiąc, że coś jest nie tak z zakresem kolumn, czy ktoś może mi pomóc? Kod powinien wyglądać tak, ale zamiast wierszy powinny to być kolumny:

for row in range(2, sheet.max_row + 1):
state  = sheet["B" + str(row)].value
county = sheet["C" + str(row)].value
pop    = sheet["D" + str(row)].value

kod, który próbowałem to:

import openpyxl
wb = openpyxl.load_workbook("name of wb")
sheet = wb.get_sheet_by_name("Sheet1")
for col in range("G", sheet.max_column + 1):
state  = sheet[1 + str(column)].value
county = sheet[2 + str(column)].value
pop    = sheet[3 + str(column)].value
hospitals  = sheet[4 + str(column)].value
universities = sheet[5 + str(column)].value

Odpowiedzi:

0 dla odpowiedzi № 1

Domyślam się, że twój kod "sheet.max_row + 1" jest winowajcą. Zniknie poza obszarem indeksowania listy arkuszy.


0 dla odpowiedzi nr 2

Problemem, który widzę, jest "zasięg (" G ", sheet.max_column + 1)". Argumenty dotyczące zakresu zwykle powinny być liczbami całkowitymi. Sprawdź kilka metod w module openpyxl utils:

column_index_from_string (str_col), get_column_letter (idx,)

dla twojego przykładu, column_index_from_string ("G") daje 7. Powinieneś również zmienić odniesienia do komórek w stylu Excel, np. A1 nie 1A.

import openpyxl
wb = openpyxl.load_workbook("name of wb")
sheet = wb.get_sheet_by_name("Sheet1")
for col in range(openpyxl.utils.column_index_from_string("G"), sheet.max_column + 1):
state  = sheet[openpyxl.utils.get_column_letter(col) + "1"].value
county = sheet[openpyxl.utils.get_column_letter(col) + "2"].value
pop    = sheet[openpyxl.utils.get_column_letter(col) + "3"].value
hospitals  = sheet[openpyxl.utils.get_column_letter(col) + "4"].value
universities = sheet[openpyxl.utils.get_column_letter(col) + "5"].value