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

- 目标PPT效果(单文本框内呈现):

- 源Word文档效果:
已尝试的现有方案
目前找到的可复用代码仅支持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
相关产品推荐
相关产品推荐

