zoukankan      html  css  js  c++  java
  • python操作docx文档(转)

    python操作docx文档


       关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很出名的一个工具"pandoc,下面我会对他们各自进行介绍。

    1.     首先便是python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题、样式等几乎所有的word文档中能常用的功能都包含了,这个包的主要功能便是用来创建文档,相对来说用来修改功能不是很强大,关于文档请查看他的"官网;

    2. 再然后便是python-docx-template这个包了,他可以用来对docx文档进行修改,诸如对文档中的 文本、图片、富文本、等几乎所有存在与文档中的他都能替换,而且他操作起来就如同很多web框架中的模板语言一样,因为他是和jinjia2模板语言结合使用的,所以最好希望使用之前对模板语言有一定了解;

    3. 关于pandoc,这个包在许多需要进行文本转换的地方用处很强大,他可以把许多如今存在的文档格式转换问另一种文档格式,如html、markdown、docbook、latex、docx等转换为xml、latex、markdown、pdf,总之很强大,这是官网,有兴趣的可以去了解下。

    下面便会相应介绍他们各自的大概的用法。还是按照上面的顺序进行介绍,大笑

    • 关于python-docx这个包我觉得最好还是引用他官网的一段代码解释最为合适了,因为这里面基本情况都被包含了,

     
    1. from docx import Document
    2. from docx.shared import Inches  
    3.   
    4. document = Document()  # 首先这是包的主要接口,这应该是利用的设计模式的一种,用来创建docx文档,里面也可以包含文档路径(d:\2.docx)  
    5.   
    6. document.add_heading('Document Title', 0)  # 这里是给文档添加一个标题,0表示 样式为title,1则为忽略,其他则是Heading{level},具体可以去<a href="https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html" target="_blank">官网</a>查;  
    7.   
    8. p = document.add_paragraph('A plain paragraph having some ') # 这里是添加一个段落  
    9. p.add_run('bold').bold = True   # 这里是在这个段落p里文字some后面添加bold字符  
    10. p.add_run(' and some ')  
    11. p.add_run('italic.').italic = True  
    12.   
    13. document.add_heading('Heading, level 1', level=1)   # 这里是添加标题1  
    14. document.add_paragraph('Intense quote', style='IntenseQuote') # 这里是添加段落,style后面则是样式  
    15.   
    16. document.add_paragraph(  
    17.     'first item in unordered list', style='ListBullet'    # 添加段落,样式为unordered list类型  
    18. )  
    19. document.add_paragraph(  
    20.     'first item in ordered list', style='ListNumber'    # 添加段落,样式为ordered list数字类型  
    21. )  
    22.   
    23. document.add_picture('monty-truth.png', width=Inches(1.25))  # 添加图片  
    24.   
    25. table = document.add_table(rows=1, cols=3)   # 添加一个表格,每行三列  
    26. hdr_cells = table.rows[0].cells   # 表格第一行的所含有的所有列数  
    27. hdr_cells[0].text = 'Qty'    # 第一行的第一列,给这行里面添加文字  
    28. hdr_cells[1].text = 'Id'  
    29. hdr_cells[2].text = 'Desc'  
    30. for item in recordset:  
    31.     row_cells = table.add_row().cells   # 这是在这个表格第一行 (称作最后一行更好) 下面再添加新的一行  
    32.     row_cells[0].text = str(item.qty)  
    33.     row_cells[1].text = str(item.id)  
    34.     row_cells[2].text = item.desc  
    35.    
    36. document.add_page_break()    # 添加分页符  
    37.   
    38. document.save('demo.docx')  # 保存这个文档  

    具体样式请看:

    关于更多细节希望大家还是去他的官网python-docx;看,介绍的还是很详细

    • 然后便是python-docx-template包了,他用起来就向python中的模板语言一样,有上下文,有模板,然后进行变量的替换

    关于python-docx-template,他的官网名称便是“像jinjia2一样来操作docx文档”,因此这个包对于用来进行文档修改时很强大的下面是一个简单例子:

    [python] view plain copy
     
    1. from docxtpl import DocxTemplate  
    2.   
    3. doc = DocxTemplate("1.docx")  # 对要操作的docx文档进行初始化  
    4. context = { 'company_name' : "World company" }   # company_name 是存在于1.docx文档里面的变量,就像这样{{company_name}},直接放在1.docx文件的明确位置就行  
    5. doc.render(context)   # 这里是有jinjia2的模板语言进行变量的替换,然后便可以在1.docx文档里面看到{{company_name}}变成了World company  
    6. doc.save("generated_doc.docx")   # 保存  
    7.   
    8. 当然,这个包的功能远远不止上面例子中的一些,可以包含图片  
    9.   
    10. myimage = InlineImage(doc,'test_files/python_logo.png',width=Mm(20)) # tpl便是上面例子中的doc对象  
    11.   
    12. 也可以包含另一个docx文档,  
    13. sub = doc.new_subdoc()  
    14. sub.subdocx = Document('d:\2.docx')  
    15. doc.render({'sub': sub})  
    这里操作之后便可以把2.docx文件里面的内容直接插入到doc对象(也就是1.docx)文档中{{sub}}这个变量处,被替换为2.docx中的,基本上用到的都是这两个部分,

    关于更多的特性,可以访问官网的example,里面涵盖了几乎所有的特性,地址是https://github.com/elapouya/python-docx-template/tree/master/tests

    • 最后便是pandoc了,我在这次用到的功能主要是,用来把html文件直接转换为markdow格式文件,然后再转换为txt文件,最后将txt文件内容和格式一同插入到docx文档中,当然,也可以直接把html文件转换为docx文件,格式基本一致


    这是用到的命令,而由于使用pandoc是在控制台下cmd或者shell使用的,因此要用到python的另一个包subprocess

    [python] view plain copy
     
    1. import subprocess  
    2. subprocess.call('pandoc --latex-engine=xelatex temp.html -o temp.text', cwd='d:\python', shell=True)  
    3. subprocess.call('pandoc --latex-engine=xelatex temp.text -o t1.text', cwd='d:\python', shell=True)  
    或者
    [python] view plain copy
     
    1. <span style="background-color:rgb(153,153,255);">subprocess.call('pandoc temp.html -o temp.docx', cwd='d:\python', shell=True)</span>  
    首先里面的cwd参数设置后,会把这个命令执行环境调到cwd所设置的参数路径处,就如同执行命令前,如同先执行了 cd d:\python命令一样,shell=True相当于新开了一个shell或者cmd控制台,而关于更多例子,可以去官网的在线转换器https://pandoc.org/try/ 或者官网的例子https://pandoc.org/demos.html

  • 相关阅读:
    Spring发展历程总结
    杂说
    说说Java生态圈的那些事儿
    你知道什么是Grunt么?
    jquery常见知识点 总结
    优化JavaScripe 提升首页加载速度的几种方案解析
    final static 深度解析
    JS的预编译和执行顺序 详析(及全局与局部变量)
    swipe.js 2.0 轻量级框架实现mobile web 左右滑动
    JS中跨域和沙箱的解析
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/8315814.html
Copyright © 2011-2022 走看看