Чтение объединенных ячеек в 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 

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

  • Чтение значения ячейки, которое содержит формулу, возвращает 0.0 при использовании xlrd
  • Дата и время выпуска Python Excel в выпуске
  • pyExcelerator или xlrd - Как узнать / найти строку для данных нескольких столбцов?
  • Получение URL-адреса из гиперссылок Excel-листа в Python с помощью xlrd
  • Преобразование Python Float в String без потери точности
  • Есть ли способ закрыть книгу с помощью xlrd
  • В python удаляет строки из файла excel с помощью xlrd, xlwt и xlutils
  • Не удалось прочитать значение formular после использования xlsxwriter для закрытия, а затем с помощью xlrd прочитать файл excel
  • измените имя листа excel после прочтения файла в python
  • почему мой код python возвращает текст: «моя строка» вместо моей строки?
  • Шаблон Python Excel читает и переписывает, поддерживает формулы и форматирование
  • Python - лучший язык программирования в мире.