You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python将Word带原有格式文本复制到PowerPoint单个文本框

Python实现Word到PowerPoint保留原格式单文本框复制

需求说明

  • 核心目标:通过Python将Word文档内全部文本1:1保留原有格式,统一写入PowerPoint的同一个文本框内
  • 待解决问题:Word内存在粗体、非粗体等混合格式,需要确认方案可行性并落地实现
  • 开发依赖:python-docx(Word读写)、python-pptx(PowerPoint读写)
  • 效果参考:
    • 源Word文档效果:Word文档样例
    • 目标PPT效果(单文本框内呈现):目标PPT效果

已尝试的现有方案

目前找到的可复用代码仅支持Word跨文档的带格式复制,无法直接用于PPT场景,代码如下:

def get_para_data(output_doc_name, paragraph):
    """
    Write the run to the new file and then set its font, bold, alignment, color etc. data.
    """

    output_para = output_doc_name.add_paragraph()
    for run in paragraph.runs:
        output_run = output_para.add_run(run.text)
        # Run's bold data
        output_run.bold = run.bold
        # Run's italic data
        output_run.italic = run.italic
        # Run's underline data
        output_run.underline = run.underline
        # Run's color data
        output_run.font.color.rgb = run.font.color.rgb
        # Run's font data
        output_run.style.name = run.style.name
    # Paragraph's alignment data
    output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment

调用逻辑:

input_doc = Document('InputDoc.docx')
output_doc = Document()

# Call the function
get_para_data(output_doc, input_doc.paragraphs[3])

# Save the new file
output_doc.save('OutputDoc.docx')

可落地实现方案

该需求完全可实现,核心逻辑和Word跨文档复制一致:Word的段落、PPT的文本框内容都是由多个独立带格式的run(文本片段)组成,只需逐段读取Word中每个run的文本和格式属性,逐个追加到PPT文本框的run中即可。

第一步:安装依赖

pip install python-docx python-pptx

第二步:完整实现代码

from docx import Document
from pptx import Presentation
from pptx.util import Inches, Pt
from docx.shared import RGBColor

def copy_word_to_ppt_textbox(word_path, ppt_textframe, keep_all_format=True):
    # 清空文本框默认占位内容
    ppt_textframe.clear()
    source_doc = Document(word_path)

    for para_idx, source_para in enumerate(source_doc.paragraphs):
        # 首个段落复用文本框默认段落,后续段落手动新增
        if para_idx == 0:
            target_para = ppt_textframe.paragraphs[0]
        else:
            target_para = ppt_textframe.add_paragraph()
        
        # 复制段落对齐格式
        target_para.alignment = source_para.paragraph_format.alignment

        # 逐run复制文本和对应格式
        for source_run in source_para.runs:
            target_run = target_para.add_run(source_run.text)
            if not keep_all_format:
                continue
            # 复制基础字形
            target_run.bold = source_run.bold
            target_run.italic = source_run.italic
            target_run.underline = source_run.underline
            # 复制字体属性
            if source_run.font.name:
                target_run.font.name = source_run.font.name
            if source_run.font.size:
                target_run.font.size = Pt(source_run.font.size.pt)
            # 复制字体颜色
            if source_run.font.color and source_run.font.color.rgb:
                r, g, b = source_run.font.color.rgb
                target_run.font.color.rgb = RGBColor(r, g, b)

if __name__ == "__main__":
    # 初始化PPT,创建空白幻灯片
    prs = Presentation()
    blank_slide = prs.slides.add_slide(prs.slide_layouts[6]) # 6为空白版式索引
    # 创建目标文本框,可自行调整位置尺寸(单位:英寸)
    textbox = blank_slide.shapes.add_textbox(
        left=Inches(1),
        top=Inches(1),
        width=Inches(8),
        height=Inches(5)
    )
    # 执行格式复制
    copy_word_to_ppt_textbox("InputDoc.docx", textbox.text_frame)
    # 保存结果
    prs.save("OutputPPT.pptx")

扩展说明

  • 如果需要保留更多格式(如上标、下标、删除线、字符间距等),只需按照相同的属性映射规则补充赋值即可,python-docx和python-pptx的run属性命名高度一致,直接对照API文档补全即可
  • 上述代码默认读取Word正文段落,如果需要提取Word表格、形状内的文本,只需额外遍历对应元素的段落对象,复用相同的run复制逻辑即可
  • 可根据实际排版需求调整文本框的位置、尺寸参数。

内容的提问来源于stack exchange,提问作者neo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:36:21