при создании excel-файла на python каждый следующий содержит значения предыдущего
Продолжаю делить excel-файл на маленькие файлы. в данном случае файл имеет несколько листов. надо создать файлы в соответствии с условием, по значению в определенной ячейке. Написал код:
for zags_name in ZAGS:
short_name = reduce_name(split_text(zags_name)[1])
FilePath = os.path.join(FolderName, short_name+'.xlsx') # Путь до файла
if not os.path.exists(FilePath):
zags_array = [None]*len(tempWB_sheets)
for index, sheet_name in enumerate(tempWB_sheets):
zags_array[index] = sheet_name
title = zags_array[index].title
datas_from_zagses = []
sheet_name = SakhaWorkBook[title]
max_row = sheet_name.max_row
for row in sheet_name.iter_rows(min_row=2, max_row=max_row, min_col=1, max_col=sheet_name.max_column):
if row[6].value == zags_name:
datas_from_zagses.append(list(cell.value for cell in row))
Terget_wb = TempWB[title]
for i, row in enumerate(datas_from_zagses):
maxRow = Terget_wb.max_row
Terget_wb.cell(row= maxRow + 1, column = 1, value=row[0])
for j, value in enumerate(row):
Terget_wb.cell(row= maxRow + 1, column=j + 1, value=value)
TempWB.save(FilePath)
TempWB.close()
Но вместо того, чтобы создавать пустой файл (массив), я так думаю Target_wb, в него идет добавление новых значений. получается что в последнем файле содержаться значения исходного, но в упорядоченном виде. Полагал, что перед очередным прохождением цикла надо удалять массив (ну или очищать), но и это не помогло.
Ответы (1 шт):
Проблема заключается в том, что вы повторно используете тот же объект TempWB для каждой итерации цикла, что означает, что данные из предыдущих итераций все еще присутствуют в рабочей книге. Чтобы исправить это, вам нужно создать новый объект Target_wb для каждой итерации:
for zags_name in ZAGS:
short_name = reduce_name(split_text(zags_name)[1])
FilePath = os.path.join(FolderName, short_name+'.xlsx') # Путь до файла
if not os.path.exists(FilePath):
# Создайте новую рабочую книгу для каждой итерации
Target_wb = Workbook() # или xlsxwriter.Workbook() в зависимости от вашей библиотеки
for index, sheet_name in enumerate(tempWB_sheets):
zags_array[index] = sheet_name
title = zags_array[index].title
datas_from_zagses = []
sheet_name = SakhaWorkBook[title]
max_row = sheet_name.max_row
for row in sheet_name.iter_rows(min_row=2, max_row=max_row, min_col=1, max_col=sheet_name.max_column):
if row[6].value == zags_name:
datas_from_zagses.append(list(cell.value for cell in row))
for i, row in enumerate(datas_from_zagses):
maxRow = Target_wb.active.max_row
Target_wb.active.cell(row= maxRow + 1, column = 1, value=row[0])
for j, value in enumerate(row):
Target_wb.active.cell(row= maxRow + 1, column=j + 1, value=value)
Target_wb.save(FilePath)
Target_wb.close()
Новый объект Target_wb обеспечит начало файла с чистого листа, и вы не будете переносить данные из предыдущих итераций.