Избегайте AttributeError: у объекта 'set' нет атрибута 'range' - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу редактировать электронную таблицу Excel, используя openpyxl.и объедините все объединенные ячейки в документе, чтобы с большей точностью прочитать весь лист, а затем сохранить его в новом файле.Ниже приведен код, который я использую:

import os
import numpy as np
import pandas as pd
from openpyxl import load_workbook

base_folder = '/Users/esparaquia/Projects/readExcel'

test_file = 'BookTest.xlsm'
wb = load_workbook(filename=os.path.join(base_folder, test_file))
ws = wb['Sheet1']

# unmerge all the cells
while ws.merged_cells.ranges != []:
   # unmerge all the merged_cells
   for merged in ws.merged_cells.ranges:
      ws.unmerge_cells(str(merged))

# forward fill in every row based on border properties
value = ''
for irow, row in enumerate(ws.rows):

   # only worry about the first few rows (the headers)
   if irow < 2:

       for cell in row:
           # check if there is a left border (that it starts a header block)
           if multi_getattr(cell, 'border.left.color.tint') or cell.col_idx == 1:
              value = cell.value

           # fill in an empty space
           if cell.value is None or cell.value == '':
              cell.value = value

# save the modified file
temp_file = 'tmp.xlsx'
wb.save(filename=os.path.join(base_folder, temp_file))

И это ошибка, которую я получаю при запуске этого кода:

---------------------------------------------------------------------------
AttributeError                  Traceback (most recent call last)
<ipython-input-15-96fa676a9b5d> in <module>()
      12 # unmerge all the cells
----> 13 while ws.merged_cells.ranges != []:
      14     # unmerge all the merged_cells
      15     for merged in ws.merged_cells.ranges:
      16         ws.unmerge_cells(str(merged))

AttributeError: 'set' object has no attribute 'ranges'

В строке:

while ws.merged_cells.ranges != []:

Буду очень признателен за вашу помощь, я начинаю с Python и до сих пор не вижу, как эти ошибки

1 Ответ

0 голосов
/ 30 апреля 2019

В вашем коде ws.merged_cells - это set, и у этого объекта нет атрибута диапазона, для чего-то похожего вы, вероятно, должны сделать:

while ws.merged_cells.ranges != set():

Поскольку set() является пустым заданным объектом

...