Форум сайта python.su
Всем привет! Я новичок в Python и у меня возникла проблема с работой openpyxl.
Проблема следующего характера: нужно подсчитать кол-во непустых ячеек в столбце и вывести значение, НО в столбце могут быть пропущены несколько значений, и если они есть, то их все равно считать.
#!/usr/bin/env python # tries stress SST, SAT and MSAT from openpyxl import * wb = load_workbook(filename='VAS-1.xlsx', read_only=True) # open work book for processing ws = wb['list2'] # use this worksheet cell=0 def count_cells_with_data(row): if row is None: print('Argument is None') elif type(row) is not str: print('Error: '+str(row)+' this value is not string') else: i = 1 data = 0 result=row+str(i) while True: if ws[result].value is None: print('end') else: #ws[result].value is not None: data = data + 1 i = i + 1 result = row + str(i) # print(ws[result].value) print(data) print('end') count_cells_with_data('A')
Офлайн
Когда цикл доходит до последнего значения, то попадает на пустую строку и выдает ошибку:
Traceback (most recent call last): File "/Users/alexeylaptev/PycharmProjects/exelPython/main.py", line 33, in <module> count_cells_with_data('A') File "/Users/alexeylaptev/PycharmProjects/exelPython/main.py", line 21, in count_cells_with_data if ws[result].value is None: File "/usr/local/lib/python2.7/site-packages/openpyxl/worksheet/read_only.py", line 83, in __getitem__ return meth(key) File "/usr/local/lib/python2.7/site-packages/openpyxl/worksheet/worksheet.py", line 371, in __getitem__ return self._get_cell(min_row, min_col) File "/usr/local/lib/python2.7/site-packages/openpyxl/worksheet/read_only.py", line 182, in _get_cell cell = tuple(self.get_squared_range(column, row, column, row))[0] IndexError: tuple index out of range Process finished with exit code 1
Офлайн
Жалуется на переменную cell, которая объявляется но не используется вроде нигде, может в этом часть проблемы?
и еще вроде как цикл не прерывается
while True:
Отредактировано IceIsNice (Ноя. 28, 2016 15:54:11)
Офлайн
IceIsNice
Жалуется на переменную cell, которая объявляется но не используется вроде нигде, может в этом часть проблемы?и еще вроде как цикл не прерывается
Офлайн
wolfkonig97
все равно выходит ошибка когда записи заканчиваются в столбце
Офлайн
Iskatel
Офлайн
Да хз, я сам это не юзал.
Но! есть два стандартных варианта:
1. определяешь размер, и дальше не лезешь
2. юзаешь “try…except”
Офлайн
wolfkonig97, оставлю ссылку в которой задаются ограничения в экселе, попробуй цикл ими ограничить, но я не думаю что у тебя эксель файл забит до упору.
https://support.office.com/ru-ru/article/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-Excel-16c69c74-3d6a-4aaf-ba35-e6eb276e8eaa?ui=ru-RU&rs=ru-RU&ad=RU
Офлайн