@kvellou

Какие ресурсы помогут исправить проблему с объединением docx файлов с python?

Я хочу объединить несколько файлов docx в котором хранятся таблица.
Вот ссылка на файлы и нужный результат: https://drive.google.com/drive/folders/1pPZ-sR217p...

Вот код который я попробовал:
spoiler
import os
from docx import Document

def merge_docx_files(folder_path, output_file):
    # Создаем новый документ
    merged_document = Document()

    # Получаем список файлов в папке
    files = os.listdir(folder_path)

    # Обрабатываем каждый файл
    for file in files:
        # Проверяем, что файл имеет расширение .docx
        if file.endswith(".docx"):
            file_path = os.path.join(folder_path, file)

            # Открываем файл
            doc = Document(file_path)

            # Копируем содержимое каждого файла в объединенный документ
            for element in doc.element.body:
                merged_document.element.body.append(element)

    # Сохраняем объединенный документ в выходной файл
    merged_document.save(output_file)


input_folder = r"C:\docx"
output_file = r"C:\docx\merged.docx"

merge_docx_files(input_folder, output_file)


Происходит разрыв таблиц между страницами. Можете помочь пожалуйста?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
sandersrocket
@sandersrocket
programmer
from docx import Document

merged_doc = Document()

file_names = ["file1.docx", "file2.docx", "file3.docx"]

for file_name in file_names:
    doc = Document(file_name)

    for element in doc.element.body:
        if isinstance(element, docx.oxml.table.CT_Tbl):
            new_table = merged_doc.add_table(rows=0, cols=len(element[0]))
            for row in element:
                new_row = new_table.add_row().cells
                for i, cell in enumerate(row):
                    new_row[i].text = cell.text

        else:
            merged_doc.element.body.append(element)

    if file_name != file_names[-1]:
        merged_doc.add_page_break()

merged_doc.save("merged.docx")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы