Чтение объединенных ячеек в Excel с помощью Python

Я пытаюсь читать объединенные ячейки Excel с Python с помощью xlrd.

Мой Excel: (обратите внимание, что первый столбец объединен в три строки)

ABC +---+---+----+ 1 | 2 | 0 | 30 | + +---+----+ 2 | | 1 | 20 | + +---+----+ 3 | | 5 | 52 | +---+---+----+ 

Я хотел бы прочитать третью строку первого столбца как равную 2 в этом примере, но он возвращает '' . Вы не знаете, как добраться до ценности объединенной ячейки?

Мой код:

 all_data = [[]] excel = xlrd.open_workbook(excel_dir+ excel_file) sheet_0 = excel.sheet_by_index(0) # Open the first tab for row_index in range(sheet_0.nrows): row= "" for col_index in range(sheet_0.ncols): value = sheet_0.cell(rowx=row_index,colx=col_index).value row += "{0} ".format(value) split_row = row.split() all_data.append(split_row) 

Что я получаю:

 '2', '0', '30' '1', '20' '5', '52' 

Что я хотел бы получить:

 '2', '0', '30' '2', '1', '20' '2', '5', '52' 

2 Solutions collect form web for “Чтение объединенных ячеек в Excel с помощью Python”

Я просто попробовал это и, похоже, работает для ваших данных образца:

 all_data = [] excel = xlrd.open_workbook(excel_dir+ excel_file) sheet_0 = excel.sheet_by_index(0) # Open the first tab prev_row = [None for i in range(sheet_0.ncols)] for row_index in range(sheet_0.nrows): row= [] for col_index in range(sheet_0.ncols): value = sheet_0.cell(rowx=row_index,colx=col_index).value if len(value) == 0: value = prev_row[col_index] row.append(value) prev_row = row all_data.append(row) 

возврате

 [['2', '0', '30'], ['2', '1', '20'], ['2', '5', '52']] 

Он отслеживает значения из предыдущей строки и использует их, если соответствующее значение из текущей строки пуст.

Обратите внимание, что приведенный выше код не проверяет, действительно ли данная ячейка является частью объединенного набора ячеек, поэтому она может дублировать предыдущие значения в тех случаях, когда ячейка действительно должна быть пустой. Тем не менее, это может помочь.

Дополнительная информация:

Впоследствии я нашел страницу документации, в которой говорится об merged_cells который можно использовать для определения ячеек, которые включены в различные диапазоны объединенных ячеек. В документации говорится, что это «Новое в версии 0.6.1», но когда я попытался использовать его с xlrd-0.9.3, как установлено pip я получил ошибку

NotImplementedError: formatting_info = Истина еще не реализована

Я не особо склонен начинать преследовать разные версии xlrd, чтобы проверить функцию merged_cells , но, возможно, вам может быть интересно это сделать, если приведенный выше код недостаточен для ваших нужд, и вы столкнулись с той же ошибкой, что и я с formatting_info=True .

 openpyxl.worksheet.merged_cell_ranges 

Эта функция позволяет получить массив, подобный ['A1:M1', 'B22:B27'] , который сообщает вам, что ячейки будут объединены.

 openpyxl.worksheet.merged_cells 

Эта функция показывает, была ли ячейка объединена или нет.

  • Получение URL-адреса из гиперссылок Excel-листа в Python с помощью xlrd
  • Ошибка импорта Eclipse XLRD, XLWT
  • Проверка значения ячейки с помощью XLRD
  • Как читать файл Excel в Python с помощью xlrd? Может ли он читать новые форматы Office?
  • python xlrd неподдерживаемый формат или поврежденный файл.
  • python xlutils: formatting_info = Истина еще не реализована
  • log4cplus: ERROR в python при вызове диалога tkinter file
  • Python xlrd читается как строка
  •  
    Interesting Posts for Van-Lav

    Матричное умножение в Clojure vs Numpy

    Реконструированное изображение после лапласианской пирамиды Не то же самое, что оригинальное изображение

    Создание графика с датой и временем в осях с меткой matplotlib

    «Ошибка импорта: динамический модуль не определяет функцию init (init_mysql)», импортируя MySQLdb в OS X

    Нарезка списка Python с массивом индексов NumPy – любой быстрый способ?

    Настройка пути python для sublimerepl из возвышенного текста?

    Пьемон курсора Pymongo (1) возвращает более 1 результата

    Анимация сюжета mayavi points3d

    не является сериализуемым JSON

    Исключение BadStatusLine, возникающее при возврате ответа с сервера в Python 3

    Поиск корней большого числа функций с одной переменной

    Ловушки в R для программистов Python

    Как разобрать неверный HTML в python, используя стандартные библиотеки

    Ошибка ввода типа с помощью numpy.take

    Каков наилучший способ генерации случайных строк определенной длины в Python?

    Python - лучший язык программирования в мире.