#excel #python-3.x #pydev #openpyxl
#excel #python-3.x #pydev #openpyxl
Вопрос:
с версией 2.3.5 openpyxl этот код работает:
from openpyxl import load_workbook
excel_file = load_workbook(excel_file_path,read_only=True)
sheet = excel_file["Sheet1"]
mylist = []
for row in sheet:
for cell in row:
mylist.append((cell.value, cell.row, cell.column))
я сделал это, чтобы быстрее обрабатывать свой большой файл Excel. но с новой версией, начиная с 2.4.x, это больше не работает, первый «цикл for» немедленно прерывается, что изменилось в версии? или как я могу сделать то же самое с последней версией openpyxl?
Комментарии:
1. Что вы имеете в виду под «перерывами»? Пожалуйста, предоставьте полную обратную трассировку.
2. я имею в виду, что он даже не выполняет первый цикл, он просто переходит к следующей строке кода, первый «for-loop» даже не введен
3. Это происходит с новой версией в любое время, когда я устанавливаю
read_only
True
. В противном случае все в порядке.4. Ну, это может быть плохой файл. Не могу сказать, не видя этого, но код здесь не изменился.
5. @CharlieClark, я только что протестировал это на более чем 5 файлах Excel. Он ведет себя так же (работает, когда
read_only = False
, но не когдаread_only = True
).
Ответ №1:
Похоже, это происходит только тогда, когда у вас установлен read_only
параметр True
при загрузке рабочей книги. Мой обходной путь заключался в использовании max_row
атрибута sheet
для создания range
значений для перебора в качестве индексов строк:
from openpyxl import load_workbook
excel_file = load_workbook(excel_file_path,read_only=True)
sheet = excel_file["Sheet1"]
mylist = []
row_num = sheet.max_row
for row_index in range(1,row_num):
for cell in sheet[row_index]:
mylist.append((cell.value, cell.row, cell.column))
Надеюсь, @CharlieClark сможет пролить некоторый свет на это. Но в то же время я надеюсь, что это полезно.
Комментарии:
1. спасибо, я попробовал, это действительно обходной путь, который работает с новой версией, но все же было бы неплохо узнать, что изменилось и почему приведенный выше код не работает с последней версией