Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 23, 2016 13:45:07

wolfkonig97
От: Нижний Новгород
Зарегистрирован: 2016-11-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

Всем привет! Я новичок в 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')

Офлайн

#2 Ноя. 23, 2016 13:47:07

wolfkonig97
От: Нижний Новгород
Зарегистрирован: 2016-11-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

Когда цикл доходит до последнего значения, то попадает на пустую строку и выдает ошибку:

 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

Офлайн

#3 Ноя. 28, 2016 15:53:50

IceIsNice
Зарегистрирован: 2016-11-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

Жалуется на переменную cell, которая объявляется но не используется вроде нигде, может в этом часть проблемы?

и еще вроде как цикл не прерывается

 while True: 
нет условия выхода из цикла вот он похоже и крутит до бесконечности.

p.s. сам новичок и сам с экселем ковыряюсь.

Отредактировано IceIsNice (Ноя. 28, 2016 15:54:11)

Офлайн

#4 Ноя. 29, 2016 19:16:38

wolfkonig97
От: Нижний Новгород
Зарегистрирован: 2016-11-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

IceIsNice
Жалуется на переменную cell, которая объявляется но не используется вроде нигде, может в этом часть проблемы?и еще вроде как цикл не прерывается

Даже если в условие добавляю breake, все равно выходит ошибка когда записи заканчиваются в столбце

Офлайн

#5 Ноя. 29, 2016 20:07:19

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

openpyxl

wolfkonig97
все равно выходит ошибка когда записи заканчиваются в столбце

Лаптев, ну ты сам то из своего сообщения хоть что-то понял? “когда записи заканчиваются в столбце” там уже поздно в несуществующей записи проверять “ноне” она или нет, ее вообще читать нестоит.

Офлайн

#6 Ноя. 29, 2016 22:37:32

wolfkonig97
От: Нижний Новгород
Зарегистрирован: 2016-11-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

Iskatel

Так а как я определю что её читать не стоит?

Офлайн

#7 Ноя. 30, 2016 22:16:16

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

openpyxl

Да хз, я сам это не юзал.

Но! есть два стандартных варианта:

1. определяешь размер, и дальше не лезешь
2. юзаешь “try…except”

Офлайн

#8 Дек. 2, 2016 13:28:48

IceIsNice
Зарегистрирован: 2016-11-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

openpyxl

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version