• 《Python趣味工具》——ppt的操作(2)


    在上次,我们对PPT进行了简单的处理;本次,我们要将PPT中的文本内容写入到 Word 文档中并添加标题,让 Word 文档看上去结构清晰,方便使用。


    在这里插入图片描述


    一、安装docx模块:

    要使用 Python 对 Word 文档进行操作,我们需要安装一个用于数据写入的工具 python-docx

    需要注意的是,python-docx 模块只可读取、写入 .docx 文件,不支持 .doc 文件。

    .docx .doc 都是 Word 的文件后缀名,其中:

    • .docx 是 Microsoft Office2007 之后的版本;
    • .doc 是 Microsoft Office2003 以前的版本。

    安装python-docx非常简单,在终端中输入代码:
    pip install python-docx

    如果电脑中同时存在Python 2 和 3,可能需要将pip改成pip3。
    pip3 install python-docx

    如果在自己电脑上安装不上或安装缓慢,可在命令后添加如下配置进行加速:
    pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple/


    二、从PPT中转移文字:

    安装完 python-docx 模块后,下一步就是导入这个模块。

    需要注意的是,导入python-docx模块需要使用 import docx,而不是import python-docx。
    我们想要把 .pptx 文件中的文本内容全部写入 Word 文档中:

    1️⃣首先,就需要新建一个空白 Word 文档;
    2️⃣其次,将文本内容全部添加进 Word 文档中;
    3️⃣最后,保存这个文档。


    1. 创建空白文档:

    使用这段代码就可以在指定路径下新建一个空白 Word 文档。

    import docx
    docxFile = docx.Document()
    docxFile.save("/Users/ziliao.docx")
    
    • 1
    • 2
    • 3

    docx.Document() 函数可以新建一个 Word 文档,返回一个空白的 Word 文档对象。

    docx 模块中的 Document 类,若指定路径则是打开文档;若没有指定路径则是新建文档。

    将返回的 Word 文档对象赋值给一个变量。

    新建的 Word 文档需要使用 save() 函数,将文件路径作为参数传入,即可保存文件。


    2. 将文本内容全部添加进 Word 文档中:

    add_paragraph() 函数可以将一段文本添加到 Word 文档中。

    将要写入的文本以字符串形式传入 add_paragraph() 函数中,就可以在 Word 文档中添加一个段落。

    import docx
    
    docxFile = docx.Document()
    
    docxFile.add_paragraph("你好,我是ziliao")
    
    docxFile.save("/Users/ziliao/趣味工具.docx")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 批量写入:

    之前,我们已经将 PPT 中的文本内容以样式块为单元读取了出来。现在要将这些文本内容批量写入 Word 文档中,只需要在读取文本代码的后面,调用 add_paragraph() 函数,传入样式块的文本内容。

    texts = run.text
    # TODO 向docxFile中添加段落texts的文本内容
    docxFile.add_paragraph(texts)
    
    
    • 1
    • 2
    • 3
    • 4

    代码运行成功后,打开“资料.docx”这个文档,就可以看到写入的文本内容,真不错~

    但是,文本内容全部排列在一起,中间没有换行,也没有提示哪些段落是哪一页的内容,查找起来很不方便,这该怎么办呢?🤔


    4. 继续润色:

    在这里,我们可以添加标题,让内容有层级,方便查看。

    使用 add_heading() 函数,添加相关参数,就可以在文档中添加标题。

    import docx
    
    docxFile = docx.Document()
    
    docxFile.add_heading("我是标题",level=1)
    
    docxFile.save("/Users/Python.docx")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    将字符串传入 add_heading() 函数中,设置标题的内容。
    参数 level 是标题样式,设置为 1 表示一级标题,2表示二级标题,以此类推。

    我们可以将 PPT 的页码,作为标题添加到 Word 文档中。

    • 首先,把变量 n 设置为 1;
    • 接着,程序在读取幻灯片页时,将本页的页码以二级标题的样式添加到 Word 文档中;
    • 然后,在本页内容写入完后,将变量 n 进行累加。
    n=1
    # for循环遍历pptxFile中的.slides属性,赋值给slide
    for slide in pptxFile.slides:
        
        # TODO 向文档中添加标题",为二级标题
        docxFile.add_heading(f"第{n}页")
    
        # for循环遍历slide中.shapes属性,赋值给变量shape
        for shape in slide.shapes:
            # 判断形状中是否有文本框
            if shape.has_text_frame == True:
                # 读取形状中的文本框,并赋值给变量textFrame
                textFrame = shape.text_frame
            
                # for循环遍历文本框内的所有段落
                # 赋值给变量paragraph
                for paragraph in textFrame.paragraphs:
                    # for循环遍历段落中的所有样式块
                    # 赋值给变量run
                    for run in paragraph.runs:
                        # 读取样式块中的文本内容
                        texts = run.text
                        # 向Word文档中添加段落texts的文本内容
                        docxFile.add_paragraph(texts)
    
        # TODO 将变量n进行累加
        n+=1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    代码运行成功后,打开“资料.docx”,在文档中生成了页码为内容的标题;在每个标题下,有该页对应的文本内容。


    三、完整源码:

    我们成功将 .pptx 文件中的文本内容写入到 Word 文档中,真棒呀👍👍👍

    # 使用from...import从pptx模块中导入Presentation
    from pptx import Presentation
    # 使用import导入docx
    import docx
    
    # 新建一个空白Word文档,赋值给变量docxFile
    docxFile = docx.Document()
    
    # 将.pptx文件路径赋值给变量path
    path = "/Users/xiaohe/statistics.pptx"
    # 读取path并赋值给变量pptxFile
    pptxFile = Presentation(path)
    
    # 将变量n设置为1
    n = 1
    
    # for循环遍历pptxFile中的.slides属性,赋值给slide
    for slide in pptxFile.slides:
        
        # 向文档中添加标题f"第{n}页",为二级标题
        docxFile.add_heading(f"第{n}页",level=2)
    
        # for循环遍历slide中.shapes属性,赋值给变量shape
        for shape in slide.shapes:
            # 判断形状中是否有文本框
            if shape.has_text_frame == True:
                # 读取形状中的文本框,并赋值给变量textFrame
                textFrame = shape.text_frame
            
                # for循环遍历文本框内的所有段落
                # 赋值给变量paragraph
                for paragraph in textFrame.paragraphs:
                    # for循环遍历段落中的所有样式块
                    # 赋值给变量run
                    for run in paragraph.runs:
                        # 读取样式块中的文本内容
                        texts = run.text
                        # 向Word文档中添加段落texts的文本内容
                        docxFile.add_paragraph(texts)
    
        # 将变量n进行累加
        n = n + 1
    
    # 保存文档到指定路径,并命名为"资料.docx"
    docxFile.save("/Users/xiaohe/资料.docx")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    你在本地练习读取自己的 PPT 写入 Word 文档时,可以先整理 PPT 中段落里样式块,尽量让一个段落的样式统一。

    如果段落中的样式块过多,就会以一个样式块为一个段落写入 Word 文档中,再去调整文本格式就会很麻烦咯╮( ̄▽ ̄)╭


    好了,今天的讲解就到这里,祝各位朋友们中秋节快乐!!!
    在这里插入图片描述

  • 相关阅读:
    LeetCode39. Combination Sum
    【kubernetes】使用virtual-kubelet扩展k8s
    蔡崇信看好的菜鸟,“基本面”究竟如何?
    浅谈实时计算
    现货黄金基本知识:黄金策略五大心法
    前端 | (十四)canvas基本用法 | 尚硅谷前端HTML5教程(html5入门经典)
    Symbol详解
    flutter系列之:flutter中常用的ListView layout详解
    蒙特卡洛树搜索方法介绍——算力聚焦方法(一) Dyna-Q+
    外置USB存储设备让手机如虎添翼!如何将USB存储设备连接到手机
  • 原文地址:https://blog.csdn.net/weixin_73453526/article/details/133252609