при создании 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 шт):

Автор решения: EgorVaschuk

Проблема заключается в том, что вы повторно используете тот же объект 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 обеспечит начало файла с чистого листа, и вы не будете переносить данные из предыдущих итераций.

→ Ссылка