Пустая ячейка excel python

openpyxl seems to be a great method for using Python to read Excel files, but I’ve run into a constant problem. I need to detect whether a cell is empty or not, but can’t seem to compare any of the cell properties. I tried casting as a string and using "" but that didn’t work. The type of cell when it is empty is None, or NoneType but I can’t figure out how to compare an object to that.

Suggestions? I understand openpyxl is under development, but maybe this is more a general Python problem.

Mikku's user avatar

Mikku

6,5183 gold badges15 silver badges38 bronze badges

asked Oct 26, 2011 at 19:40

MechEngineer's user avatar

MechEngineerMechEngineer

1,3893 gold badges16 silver badges27 bronze badges

1

To do something when cell is not empty add:

if cell.value:

which in python is the same as if cell value is not None (i.e.: if not cell.value == None:)

Note to avoid checking empty cells you can use

worksheet.get_highest_row()

and

worksheet.get_highest_column()

Also I found it useful (although might not be a nice solution) if you want to use the contents of the cell as a string regardless of type you can use:

unicode(cell.value)

answered Dec 6, 2011 at 22:46

Aron Kisdi's user avatar

3

This worked for me.

if cell.value is None:
    print("Blank")
else:
    print("Not Blank")

Tomasz Jakub Rup's user avatar

answered Dec 27, 2015 at 8:18

Mikku's user avatar

MikkuMikku

6,5183 gold badges15 silver badges38 bronze badges

2

The

if cell.value is None:

is the best option to use for this case.

if you wish to use it in an iteration, you can use it like this:

ws=wb.active
names=ws['C']
for x in names:
    if x.value is None:
        break
    print(x.value)

The problem with ws.max_column and ws.max_row is that it will count blank columns as well, thus defeating the purpose.

answered May 19, 2018 at 11:30

Bhaskar's user avatar

BhaskarBhaskar

1,7981 gold badge16 silver badges27 bronze badges

You can change the cell or cells you wish to validate
Also you can code, for example:

import openpyxl

wb = openpyxl.load_workbook("file.xlsx")
sheet = wb.get_sheet_by_name('Sheet1')

if sheet.cell(row = 1, column=7).value == None:
    print("Blank") 
else:
    print("No blank")

C.Fe.'s user avatar

C.Fe.

3253 silver badges11 bronze badges

answered Sep 8, 2016 at 22:07

Felipe R Valera's user avatar

I have a workbook of 12 sheet and every sheet has some value in column A. All the useful information starts from row 9 column 0 of every sheet. Once the cell (AX,0) has no data it should move to the next sheet. Here num is the number of sheet in the workbook. The code is below:

workbook = xlrd.open_workbook('example.xlsx')
row = 9
num = 0
col = 0

while True:
    worksheet = workbook.sheet_by_index(num)
    if worksheet.cell(row, col).value != xlrd.empty_cell.value:
        worksheet.cell(row, col).value
        row+=1
    else:
        if num != 12:
            num = num + 1
            row = 9

I am getting the below error:

File «», line 4, in
if worksheet.cell(row, col).value != xlrd.empty_cell.value:
File «C:Python27libsite-packagesxlrdsheet.py», line 412, in cell self._cell_types[rowx][colx],
IndexError: list index out of range

Help me!!!

FBruzzesi's user avatar

FBruzzesi

6,3693 gold badges16 silver badges37 bronze badges

asked May 1, 2020 at 23:22

Rakesh Sharma's user avatar

1

I think the problem is that if the program enter the «else» block will be stock there because there in no way out so I suggest to either use ( break) or (return)

answered May 1, 2020 at 23:54

Ahlam's user avatar

AhlamAhlam

211 bronze badge

1

I think you should add a break in the While loop, so you dont loop infinitely.

if num != 12:
    num = num + 1
    row = 9
else:
    break

Edit

Another problem is with your if statement of checking empty cell. Based in Openpyxl check for empty cell
The problem is, that the «if» is true all the time, so row is unlimitely incremented and you get index out of range error.

If you want to check for not empty cell use this

if worksheet.cell(row, col).value != None:
    # Do stuff

answered May 1, 2020 at 23:31

Blue Print's user avatar

Blue PrintBlue Print

3313 silver badges13 bronze badges

1

Студворк — интернет-сервис помощи студентам

Приветствую.
Стоит задача перебрать книгу с множеством листов и, если попадутся данные, вытащить привязанные к ним данные.
То, что написал выдает ошибку list index out of range, т.к. кол-во интераций я задал заведомо больше, чем ячеек со значениями, их разное кол-во в листах.
Вопрос: как сделать так, чтобы цикл заканчивался на последней ячейке со значением?

Python
1
2
3
4
5
6
7
8
9
10
import xlrd
rd=xlrd.open_workbook('file.xls')
sheet=rd.sheet_by_index(0)
for i in range(1000):
    a=sheet.cell(i,1).value
    if a!=xlrd.empty_cell.value:
        if '9413232' in a:
            print(a,sheet.cell(i,4).value)
    else:
        print('ok')

если последней строкой добавить break, то ошибка исчезает, но это не вариант, т.к. после окончания поиска на 1 листе, поиск будет продолжаться на втором и т.д.
может быть стоит пойти другим путем, но я только начал разбираться в Питоне

Добавлено через 10 часов 54 минуты
Решил вопрос, вдруг кому пригодится
Поставил openpyxl, там есть возможность определять кол-во ячеек и столбцов со значениями в int
Получилось вот что:

Python
1
2
3
4
5
import openpyxl
wb=openpyxl.load_workbook('Книга1.xlsx')
sheet=wb.get_sheet_by_name('Лист1')
for row in range(1,sheet.max_row):
    print(sheet.cell(row+1,1).value)

Уведомления

  • Начало
  • » Python для новичков
  • » Определение пустой ячейки в xls

#1 Фев. 6, 2018 16:13:48

Определение пустой ячейки в xls

Доброе время.
Задача вытащить данные из таблицы xls, чтобы при достижении пустой ячейки обработка заканчивалась.
Подскажите как сделать правильно. Задал кол-во интераций больше, чем кол-во ячеек со значениями, но выходит ошибка “Вне диапазона”

for i in range(30):
a=sheet.cell(i,0).value
if a==xlrd.empty_cell.value:
print('Completed')
else:
w_sheet1.write(i,0,str(a))

Upd: Что интересно — если пустая ячейка попадается между данными, то все работает, если данные заканчиваются, то ругается list index out of range

Отредактировано megafox (Фев. 7, 2018 16:08:37)

Офлайн

  • Пожаловаться

#2 Фев. 6, 2018 20:25:57

Определение пустой ячейки в xls

print(‘Completed’)
break

Офлайн

  • Пожаловаться

#3 Фев. 7, 2018 07:39:43

Определение пустой ячейки в xls

Не, все таже ошибка list index out of range, хотя программа и выполняется
Может быть через while получится, т.е. пока есть значения в ячейках, то выполняется. Но здесь задумка в том, что, когда натыкается на пустую ячейку, переходит на следующий лист и так далее

Офлайн

  • Пожаловаться

#4 Фев. 8, 2018 21:17:48

Определение пустой ячейки в xls

Решил вопрос, вдруг кому пригодится
Поставил openpyxl, там есть возможность определять кол-во ячеек и столбцов со значениями в int
Получилось вот что:

import openpyxl
wb=openpyxl.load_workbook('Книга1.xlsx')
sheet=wb.get_sheet_by_name('Лист1')
for row in range(1,sheet.max_row):
print(sheet.cell(row+1,1).value)

Upd. А если используете xlrd, то sheet.nrows определяет кол-во ячеек со значениями, sheet.ncols — столбцов

Отредактировано megafox (Фев. 9, 2018 08:03:35)

Офлайн

  • Пожаловаться

  • Начало
  • » Python для новичков
  • » Определение пустой ячейки в xls

Содержание

  1. Объект ячейки Cell модуля openpyxl в Python.
  2. Основные атрибуты и методы объекта ячейки Cell.
  3. Содержание:
  4. Cell.base_date :
  5. Cell.check_string(value) :
  6. Cell.col_idx :
  7. Cell.column :
  8. Cell.column_letter :
  9. Cell.comment :
  10. Cell.coordinate :
  11. Cell.encoding :
  12. Cell.hyperlink :
  13. Cell.is_date :
  14. Cell.offset(row=0, column=0) :
  15. xlrd — интсрумент для чтения xls фалйов¶
  16. Функции модуля¶
  17. BaseObject¶

Объект ячейки Cell модуля openpyxl в Python.

Основные атрибуты и методы объекта ячейки Cell.

Объект ячейки Cell управляет отдельными ячейками электронной таблицы, а также описывает ее свойства. Класс Cell() должен знать свое значение и тип, параметры отображения и любые другие функции ячейки Excel.

Не создавайте объекты ячейки самостоятельно. Доступ к произвольной ячейке можно получить, обратившись к объекту рабочего листа Worksheet как к словарю, при этом ключом будет служить строка с именем ячейки, например ws[‘A1’] . Это вернет ячейку на ‘A4’ или создаст ее, если она еще не существует. Значения могут быть присвоены напрямую:

Для доступа к ячейке с использованием индексов столбцов и строк, можно использовать метод Worksheet.cell() .

Пример работы с объектом ячейки через переменную:

Содержание:

  • Cell.base_date базовый класс обработки даты,
  • Cell.check_error() проверяет правильность кодировка строки,
  • Cell.col_idx числовой индекс столбца,
  • Cell.column номер столбца этой ячейки,
  • Cell.column_letter возвращает букву столбца ячейки,
  • Cell.comment возвращает/назначает объект комментария,
  • Cell.coordinate возвращает координаты этой ячейки,
  • Cell.encoding возвращает кодировку этой ячейки,
  • Cell.hyperlink устанавливает гиперссылку,
  • Cell.is_date проверяет значение ячейки на дату,
  • Cell.offset() смещенный объект ячейки,
  • Cell.parent объект рабочего листа,
  • Cell.row номер строки этой ячейки,
  • Cell.value возвращает/устанавливает значение в ячейку,
  • Cell.alignment выравнивает значения в ячейке,
  • Cell.font стиль шрифта ячейки,
  • Cell.border стиль оформления границ ячейки,
  • Cell.fill цвет заливки ячейки.

Cell.base_date :

Свойство Cell.base_date содержит базовый класс обработки даты. По умолчанию это datetime .

Cell.check_string(value) :

Метод Cell.check_string() проверяет правильность кодировка строки, а также ее допустимой длины и символ разрыва строки.

Cell.col_idx :

Атрибут Cell.col_idx возвращает числовой индекс столбца. Нумерация столбцов в модуле openpyxl начинается с 1, а не с 0 как в списке.

Cell.column :

Атрибут Cell.column возвращает номер столбца этой ячейки. Нумерация столбцов в модуле openpyxl начинается с 1, а не с 0 как в списке.

Cell.column_letter :

Атрибут Cell.column_letter возвращает букву столбца ячейки.

Атрибут Cell.comment возвращает/назначает объект комментария Comment , связанный с этой ячейкой. Объект комментария содержит текстовый атрибут и атрибут автора, которые должны быть установлены.

Если назначить один и тот же комментарий нескольким ячейкам, то openpyxl автоматически создаст копии.

Cell.coordinate :

Атрибут Cell.coordinate возвращает координаты этой ячейки.

Cell.encoding :

Атрибут Cell.encoding возвращает кодировку этой ячейки.

Cell.hyperlink :

Свойство Cell.hyperlink устанавливает целевую гиперссылку.

Некоторые говорят что код, представленный выше — не работает. В таком случае установить ссылку в ячейку можно используя встроенную в Excel функцию ‘=HYPERLINK(link, linkName)`, например:

Cell.is_date :

Свойство Cell.is_date возвращает True , если значение отформатировано как дата.

Cell.offset(row=0, column=0) :

Метод Cell.offset() возвращает объект ячейки, смещенный на кол-во строк row и столбцов column относительно этой ячейки.

  • row — количество смещения строк.
  • column — количество смещения столбцов.

Источник

xlrd — интсрумент для чтения xls фалйов¶

Функции модуля¶

Intersection of two cell ranges is empty

деление на ноль

не правильный оператор

Illegal or deleted cell reference

Wrong function or range name

Value range overflow

Argument or function not available

Возвращает название ячейки

rowx (int) – столбец

colx (int) – строка

Возвращает абсолютное название ячейки

rowx (int) – столбец

colx (int) – строка

Возвращает название столбца

colx (int) – столбец

Для отладки и анализа: обобщить BIFF записи файла. Т.е. получаем отсортированный файл (запись, количесвто).

filename (str) – путь к файлу

outfile – объект для записи (должен иметь метод write) результатов

Для отладки, выгрузка BIFF записей в char и hex

filename (str) – путь к файлу

outfile – объект для записи (должен иметь метод write) результатов

unnumbered – опустить смещения

Открывает файл и возвращает объект xlrd.Book

filename (str) – путь к файлу

logfile – объект, для записи лог информации

verbosity – уровень логируемой информации

pickleable – что то связанное с использованием памяти, актуально для 2.4 и ниже. (Default is true. In Python 2.4 or earlier, setting to false will cause use of array.array objects which save some memory but can’t be pickled. In Python 2.5, array.arrays are used unconditionally. Note: if you have large files that you need to read multiple times, it can be much faster to cPickle.dump() the xlrd.Book object once, and use cPickle.load() multiple times.)

use_mmap – Whether to use the mmap module is determined heuristically. Use this arg to override the result. Current heuristic: mmap is used if it exists.

file_contents – as a string or an mmap.mmap object or some other behave-alike object. If file_contents is supplied, filename will not be used, except (possibly) in messages.

encoding_override – кодировка открываемого файла – New in version 0.6.0

formatting_info – Governs provision of a reference to an XF (eXtended Format) object for each cell in the worksheet. Default is False. This is backwards compatible and saves memory. “Blank” cells (those with their own formatting information but no data) are treated as empty (by ignoring the file’s BLANK and MULBLANK records). It cuts off any bottom “margin” of rows of empty (and blank) cells and any right “margin” of columns of empty (and blank) cells. Only cell_value and cell_type are available. True provides all cells, including empty and blank cells. XF information is available for each cell. – New in version 0.6.1

on_demand – управляет загрузкой листов. При открытии файла загружаются сразу все листы или листы будут загружены позже при необходимости.

ragged_rows – False (the default) means all rows are padded out with empty cells so that all rows have the same size (Sheet.ncols). True means that there are no empty cells at the ends of rows. This can result in substantial memory savings if rows are of widely varying sizes. See also the Sheet.row_len() method. – New in version 0.7.2

xlrd. rangename3d ( book, ref3d ) ¶

Ref3D((1, 4, 5, 20, 7, 10)) => ‘Sheet2:Sheet3!$H$6:$J$20’

xlrd. rangename3drel ( book, ref3d, browx=None, bcolx=None, r1c1=0 ) ¶

Ref3D(coords=(0, 1, -32, -22, -13, 13), relflags=(0, 0, 1, 1, 1, 1)) R1C1 mode => ‘Sheet1!R[-32]C[-13]:R[-23]C[12]’ A1 mode => depends on base cell (browx, bcolx)

xlrd. xldate_as_tuple ( xldate, datemode ) ¶

Преобразует дату из Excel формата в кортеж c датой (год, месяц, день, час, минута, секунды).

xldate – дата в Excel формате

datemode – 0: 1900-based, 1: 1904-based.

XLDateNegative – xldate

when using this function to interpret the contents of a workbook, you should pass in the Book.datemode attribute of that workbook. Whether the workbook has ever been anywhere near a Macintosh is irrelevant.

1904-01-01 is not regarded as a valid date in the datemode 1 system; its “serial number” is zero.

Преобразует дату из кортежа, в формат даты Excel.

datemode – 0: 1900-based, 1: 1904-based.

XLDateAmbiguous – The 1900 leap-year problem (datemode == 0 and 1.0 xlrd. xldate_from_datetime_tuple ( datetime_tuple, datemode ) ¶

Преобразует дату и время из кортежа в формат даты и времени Excel.

datemode – 0: 1900-based, 1: 1904-based.

xlrd. xldate_from_time_tuple ( (hour, minute, second) ) ¶

Преобразует время из кортежа, во время в формате Excel

XLDateBadTuple – Out-of-range hour, minute, or second

BaseObject¶

Родительсикй класс для других классов модуля

dump ( f=None, header=None, footer=None, indent=0 ) ¶ Parameters

f – файловый объект для выгрузки дампа

header (str) – текс, записываемы в файл дампа перед дампом

footer (str) – текст, записываемый после дампа

indent (int) – количество пробелов, заменяющих табуляцию

Вы не можете создать экземпляры данного класса сами. Данный объект возвращает метод xlrd.open_workbook() .

Возвращает число, версию о BIFF (Binary Interchange File Format) используемый при создании файла. (Latest is 8.0 (represented here as 80), introduced with Excel 97. Earliest supported by this module: 2.0 (represented as 20).)

Возвращает число, кодировку файла. Для BIFF 8 и выше это будет 1200, что означает юникод (UTF_16_LE). Для более ранних версии, используется число натиболее подходящее кодировке Python, например 1252 -> ‘cp1252’, 10000 -> ‘mac_roman’.

Возвращает словарь, индексы цветов. Только если открывать книгу с атрибутом open_workbook(…, formatting_info=True)

Возвращает кортеж, содержащий код страны для

настройки пользовательского интерфейса

Например: (1, 61) meaning (USA, Australia).

Возвращает число, формат даты файла

=> 1900 system (the Excel for Windows default).

=> 1904 system (the Excel for Macintosh default).

Возврашает список экземпляров объекта xlrd.Font каждая из которых соответствует записи

Возвращает список экземпляров объекта xlrd.Format каждая из которых соответствует записи. It does not contain builtin formats. If you are creating an output file using (for example) pyExcelerator, use this list. The collection to be used for all visual rendering purposes is format_map.

Возвращает словарь, полученный путем связывания xlrd.XF.format_key с объектом xlrd.Format

Возвращает число, время в секундах извлеченич XLS образа в одну строку. (Time in seconds to extract the XLS image as a contiguous string (or mmap equivalent).)

Возвращает число, время в секундах разбора XLS образа. (Time in seconds to extract the XLS image as a contiguous string (or mmap equivalent).)

Возвращает словарь. (A mapping from (lower_case_name, scope) to a single Name object.)

A mapping from lower_case_name to a list of Name objects. The list is sorted in scope order. Typically there will be one item (of global scope) in the list.

Возвращает список, содержит объект xlrd.Name для каждой записи книги

Возвращает число, количество листов в книге

Возвращает список. Если пользователь изменил любой из цветов в стандартной палитре, файл XLS будет содержать запись Палитра с 56 (16 для Excel 4.0 и ранее) значения RGB в нем, и этот список будет, например, [(r0, b0, g0 ), …, (r55, b55, g55)]. В противном случае этот список будет пустым. Это то, что вам нужно, если вы пишете файл XLS выходной. Если вы хотите сделать клетки на экране или в PDF файле, используйте colour_map. Книга должна быть открыта с параметром xlrd.open_workbook(. formatting_info=True)()

(If the user has changed any of the colours in the standard palette, the XLS file will contain a PALETTE record with 56 (16 for Excel 4.0 and earlier) RGB values in it, and this list will be e.g. [(r0, b0, g0), …, (r55, b55, g55)]. Otherwise this list will be empty. This is what you need if you are writing an output XLS file. If you want to render cells on screen or in a PDF file, use colour_map.)

Extracted only if open_workbook(…, formatting_info=True)

Возвращает строку, автора, который последним изменил файл.

Возвращает список объектов, экземпляров класса xlrd.XF соответствующих каждой записи XF

Возвращает словарь. This provides access via name to the extended format information for both built-in styles and user-defined styles. It maps name to (built_in, xf_index), where: name is either the name of a user-defined style, or the name of one of the built-in styles. Known built-in names are Normal, RowLevel_1 to RowLevel_7, ColLevel_1 to ColLevel_7, Comma, Currency, Percent, “Comma [0]”, “Currency [0]”, Hyperlink, and “Followed Hyperlink”. built_in 1 = built-in style, 0 = user-defined xf_index is an index into Book.xf_list. References: OOo docs s6.99 (STYLE record); Excel UI Format/Style

Данный метод имеет двойное предназначение.

Вы можете вызвать данный метод для освобождения памяти, после загрузки необходимого листа.

Также данный метод вызывается автоматический:

когда open_workbook вызывает исключение

если вы используете оператор with()

Возвращает лист книги по индексу, экземпляр класса xlrd.Sheet

sheetx (int) – индекс листа

Возвращает лист книги по наименованию, экземпляр класса xlrd.Sheet

sheet_name (str) – название листа

Возвращает True|False, загружен ли лист

sheet_name_or_index (int, str) – индекс или название листа

Возвращает список названий листов книги.

Возвращает список листов книги, экземпляров xlrd.Sheet .

Выгружает указанный лист.

sheet_name_or_index (int, str) – индекс или название листа

Объект “Ячейка”, содержит информацию об одной ячейке

вы не сможете создать этот класс самостоятельно. Данный объект возвращается только методами объекта xlrd.Sheet

ctype (int) –

value – зависит от ctype

xf_index – None, если “formatting_info” не включен при открытии книги

Источник

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Пустая таблиц в excel скачать
  • Пустая книга для excel
  • Пуск выполнить запустить word
  • Пуск все программы стандартные microsoft word
  • Пуск все программы microsoft office microsoft word 2010

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии