ouyangqi017 2024-05-20 07:04 采纳率: 0%
浏览 10

关于#python#的问题:需要合并文件夹下所有文档,保留原格式原图片的问题

帮我解决一下word文档合并问题,文档是带有图片及特殊格式的,我用以下代码执行时,只有第一个文档是完整的,后面的文档都全在一起了,特别是图片都叠在一起了.

我需要的是合并"订单文件"夹下的所有docx文档为一个文档,该文件夹下的文档也是生成的数量不确定,文档有长有短.需要保留所有格式及图片,合并时是以新页面合并,不是在挤在一个页面上的.

示例文件:https://www.alipan.com/s/Bj559apBTee


import os
from docx import Document
from docxcompose.composer import Composer

# 设置路径
original_docx_path = '订单文件'     # 需要合并文件夹
new_docx_path = '新文档.docx'      # 合并后的文件

# 列出目录中的所有 .docx 文件
all_word_files = [f for f in os.listdir(original_docx_path) if f.endswith('.docx')]

# 确保有文件可以处理
if not all_word_files:
    raise FileNotFoundError("在指定目录中未找到 .docx 文件。")

# 为每个文件创建完整路径
all_file_paths = [os.path.join(original_docx_path, file_name) for file_name in all_word_files]

# 初始化主文档
master = Document(all_file_paths[0])
composer = Composer(master)

# 合并其他文档
for i, file_path in enumerate(all_file_paths[1:], start=1):
    try:
        word_document = Document(file_path)
        word_document.add_page_break()
        # 追加文档
        composer.append(word_document)

    except KeyError as e:
        print(f"合并文档时出错:{file_path} - {e}")
        continue


# 保存合并后的文档
composer.save(new_docx_path)
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-20 07:04
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题: 您希望合并一个名为“订单文件”的文件夹下的所有.docx文档到一个单独的文档中,同时保留每个文档的原始格式和图片,并确保文档之间以新页面开始,而不是重叠在一起。

    问题出现原因: 从您提供的代码来看,问题可能出现在合并文档的过程中。docxcompose.composer.Composer类用于合并文档,但可能在处理图片和格式时存在限制,导致后续文档的格式和图片重叠或丢失。

    问题解决方案: 为了解决这个问题,我们可以尝试使用另一种方法来合并文档,即逐个复制每个文档的内容到一个新的Document对象中,并在每个文档之间插入分页符。这样可以确保每个文档的格式和图片都被正确保留。

    提供代码: 以下是修改后的代码示例,用于合并文档并保留格式和图片:

    import os
    from docx import Document
    
    # 设置路径
    original_docx_path = '订单文件'     # 需要合并文件夹
    new_docx_path = '合并后的文档.docx'  # 合并后的文件
    
    # 列出目录中的所有 .docx 文件
    all_word_files = [f for f in os.listdir(original_docx_path) if f.endswith('.docx')]
    
    # 确保有文件可以处理
    if not all_word_files:
        raise FileNotFoundError("在指定目录中未找到 .docx 文件。")
    
    # 创建一个新的Document对象作为合并后的主文档
    master = Document()
    
    # 遍历所有文档并逐个复制到主文档中
    for file_name in all_word_files:
        file_path = os.path.join(original_docx_path, file_name)
        doc = Document(file_path)
        
        # 复制每个文档的内容到主文档中,并在每个文档后添加分页符
        for element in doc.element.body:
            new_element = master.element.cloneElement(element)
            master.element.body.append(new_element)
        
        # 在文档末尾添加分页符
        master.add_page_break()
    
    # 保存合并后的文档
    master.save(new_docx_path)
    

    代码运行方式

    1. 确保您的Python环境中已安装python-docx库。
    2. 将上述代码保存为.py文件。
    3. 在命令行中,导航到该文件所在的目录。
    4. 运行命令python 文件名.py来执行脚本。

    代码预期运行结果

    • 所有指定文件夹下的.docx文档将被合并到一个名为“合并后的文档.docx”的新文档中。
    • 每个原始文档的格式和图片都将被保留。
    • 文档之间将以新页面开始,而不是重叠在一起。

    推荐相关链接

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验