Я боролся с этим кодом весь день. При каждом запуске цикла таблица читается из другого файла 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()