Цикл for с перечислением повторяется 4 раза, но в Excel записывается только 1 кадр данных, а не 4 - PullRequest
0 голосов
/ 24 июня 2018

Я боролся с этим кодом весь день. При каждом запуске цикла таблица читается из другого файла MS Word. Таблица копируется в фрейм данных, а затем копируется в строку в файле Excel.

При каждом последующем запуске цикла for строка Excel увеличивается, поэтому новый кадр данных может быть записан в новую строку, но после выполнения файла только одна строка показывает кадр данных.

Когда я печатаю (tfile), я получаю следующее .. ('CIV-ASCS-016_TRS.docx', 'CIV-ASCS-018_TRS .docx', 'CIV-ASCS-020_TRS.docx', 'CIV- ASCS-021_TRS .docx ') Это доказывает, что цикл выполнялся 4 раза на основе 4 файлов в каталоге. Я установил начальную строку pos на 0 вне цикла for.

Примечание. Я не показываю никаких строк кода относительно импорта необходимых библиотек.

files = glob('*.docx')
pos = 1

for i, wfile in enumerate(files[:1]):

  document = Document(wfile)

  table = document.tables[0]
  data = []
  keys = {}

  for j, row in enumerate(table.rows):
     text = (cell.text for cell in row.cells)
     if j == 0:
            keys = tuple(text)
            continue

     row_data = dict(zip(keys, text))
     data.append(row_data)

     tfile = tuple(files)

  df = pd.DataFrame(data)
  df.loc[-1] = [wfile, 'Test Case ID']   
  df.index = df.index + 1  # shifting index
  df = df.sort_index()  # sorting by index

  df1 = df.rename(index=str, columns={"Test Case ID": "TC Attributes"})

  df21 = df1.drop(columns = ['TC Attributes'])
  df3 = df21.T

# read the existing sheets so that openpyxl won't create a new one later
  book = load_workbook('test.xlsx')
  writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') 
  writer.book = book
  writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
  df3.to_excel(writer, 'sheet7', header = False, index = False, \
             startrow = pos)
  pos += 1

  writer.save()
...