docx模块

作者: cf3bc9f264d9 | 来源:发表于2019-09-28 20:02 被阅读0次

    官方地址
    https://python-docx.readthedocs.io/en/latest/

    # coding:utf-8
    # 写word文档文件
    import sys
    
    from docx import Document
    from docx.shared import Inches
    
    def main():
        reload(sys)
        sys.setdefaultencoding('utf-8')
        
        # 创建文档对象
        document = Document()
        
        # 设置文档标题,中文要用unicode字符串
        document.add_heading(u'我的一个新文档',0)
        
        # 往文档中添加段落
        p = document.add_paragraph('This is a paragraph having some ')
        p.add_run('bold ').bold = True
        p.add_run('and some ')
        p.add_run('italic.').italic = True
        
        # 添加一级标题
        document.add_heading(u'一级标题, level = 1',level = 1)
        document.add_paragraph('Intense quote',style = 'IntenseQuote')
        
        # 添加无序列表
        document.add_paragraph('first item in unordered list',style = 'ListBullet')
        
        # 添加有序列表
        document.add_paragraph('first item in ordered list',style = 'ListNumber')
        document.add_paragraph('second item in ordered list',style = 'ListNumber')
        document.add_paragraph('third item in ordered list',style = 'ListNumber')
        
        # 添加图片,并指定宽度
        document.add_picture('e:/docs/pic.png',width = Inches(1.25))
        
        # 添加表格: 1行3列
        table = document.add_table(rows = 1,cols = 3)
        # 获取第一行的单元格列表对象
        hdr_cells = table.rows[0].cells
        # 为每一个单元格赋值
        # 注:值都要为字符串类型
        hdr_cells[0].text = 'Name'
        hdr_cells[1].text = 'Age'
        hdr_cells[2].text = 'Tel'
        # 为表格添加一行
        new_cells = table.add_row().cells
        new_cells[0].text = 'Tom'
        new_cells[1].text = '19'
        new_cells[2].text = '12345678'
        
        # 添加分页符
        document.add_page_break()
        
        # 往新的一页中添加段落
        p = document.add_paragraph('This is a paragraph in new page.')
        
        # 保存文档
        document.save('e:/docs/demo1.docx')
        
    if __name__ == '__main__':
        main()
    

    官方文档

    https://python-docx.readthedocs.io/en/latest/

    github上package

    https://github.com/python-openxml/python-docx

    一,docx模块

    Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

    二,相关概念

    如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。

    1,Document对象,表示一个word文档
    2,Paragraph对象,表示word文档中的一个段落
    3,Paragraph对象的text属性,表示段落中的文本内容。

    三,模块的安装和导入

    需要注意,python-docx模块安装需要在cmd命令行中输入pip install python-docx,如下图表示安装成功(最后那句英文Successfully installed,成功地安装完成)

    注意在导入模块时,用的是import docx

    四,读取word文本

    在了解了上面的信息之后,就很简单了,下面先创建一个D:\temp\word.docx文件,并在其中输入如下内容。

    #-*- conding:utf-8 -*-
    
    import docx
    
    
    file=docx.Document(r"F:\python从入门到放弃\7\2\wenjian.docx")
    
    print('段落:'+str(len(file.paragraphs)))
    # 
    # for para in file.paragraphs:
    #     print(para.text)
        
    for i in range(len(file.paragraphs)): 
        print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)
    

    五,写word文本

    #-*- conding:utf-8 -*-
    
    import sys
    
    from docx import Document
    from docx.shared import Inches
    
    def main():
    #     reload(sys)
    #     sys.setdefaultencoding('utf-8')
        
        # 创建文档对象
        document = Document()
        
        # 设置文档标题,中文要用unicode字符串
        document.add_heading(u'我的一个新文档',0)
        
        # 往文档中添加段落
        p = document.add_paragraph('This is a paragraph having some ')
        p.add_run('bold ').bold = True
        p.add_run('and some ')
        p.add_run('italic.').italic = True
        
        # 添加一级标题
        document.add_heading(u'一级标题, level = 1',level = 1)
        document.add_paragraph('Intense quote',style = 'IntenseQuote')
        
        # 添加无序列表
        document.add_paragraph('first item in unordered list',style = 'ListBullet')
        
        # 添加有序列表
        document.add_paragraph('first item in ordered list',style = 'ListNumber')
        document.add_paragraph('second item in ordered list',style = 'ListNumber')
        document.add_paragraph('third item in ordered list',style = 'ListNumber')
        
        # 添加图片,并指定宽度
        document.add_picture('cat.png',width = Inches(2.25))
        
        # 添加表格: 1行3列
        table = document.add_table(rows = 1,cols = 3)
        # 获取第一行的单元格列表对象
        hdr_cells = table.rows[0].cells
        # 为每一个单元格赋值
        # 注:值都要为字符串类型
        hdr_cells[0].text = 'Name'
        hdr_cells[1].text = 'Age'
        hdr_cells[2].text = 'Tel'
        # 为表格添加一行
        new_cells = table.add_row().cells
        new_cells[0].text = 'Tom'
        new_cells[1].text = '19'
        new_cells[2].text = '12345678'
        
        # 添加分页符
        document.add_page_break()
        
        # 往新的一页中添加段落
        p = document.add_paragraph('This is a paragraph in new page.')
        
        # 保存文档
        document.save('demo1.doc')
        
    if __name__ == '__main__':
        main()
    

    六,读取表格

    #-*- conding:utf-8 -*-
    
    
    import docx
    
    doc = docx.Document('wenjian.docx')
    for table in doc.tables:  # 遍历所有表格
        print('----table------')
        for row in table.rows:  # 遍历表格的所有行
            # row_str = '\t'.join([cell.text for cell in row.cells])  # 一行数据
            # print row_str
            for cell in row.cells:
                print(cell.text, '\t',)
            print() #换行
    

    写表格
    https://www.cnblogs.com/lifei01/p/11376462.html

    python-docx 添加表格时很慢的解决方法

    我们做监控系统的时候常需要给客户发送邮箱报告,附带一个word的文档,文档中插入表格给用户更直观的数据
    我用的时python-docx库操作文档,最近碰到,当往文档中插入表格时,随着表格行数的增多,生成表格的速度越来越慢,在网上搜索好久都没有找到相应的解决方法,今天我分享我解决的方法。
    在网上生成表格比较多的方式时如下代码:

    image.png

    这种方式是我们先生成一个1行7列的表格,然后后续一行一行的在表格中添加数据,这样就会导致我们每加入一次数据,就会重新重载一次表格,随着数据越多,重载表格的时间就越久,这样的们生成文档的时间可以想象会要多久,严重影响我们的效率,我们运行看一下耗时多久:

    image.png

    总共花费了232秒的时间,这只是1000行的数据和比较简单的文本。

    改进以后我们用如下代码操作,我们先一次性生成一个1000行7列的表格,然后根据索引值,一次往表格中填数据,这样就不用每次插入数据时就重载表格了,我们看一下他的耗时时间:

    image.png image.png

    整理不易,请小编喝杯咖啡吧

    听说打赏我的人,都进了福布斯排行榜

    image

    相关文章

      网友评论

        本文标题:docx模块

        本文链接:https://www.haomeiwen.com/subject/bbksuctx.html