处理Word文档

利用python-docx模块,Python可以创建和修改Word文档,它带有.docx文件扩展名。运行pip install python-docx,可以安装该模块。

在导入pytho-docx模块时,需要执行import docx,而不是import python-docx。

和纯文本相比,.docx文件有很多结构。这些结构在python-docx中用3种不同的类型来表示。在最高一层,Document对象表示整个文档。Document对象包含一个Paragraph对象的列表,表示文档中的段落。每一个Paragraph对象都包含一个Run对象的列表。

Word文档中的文本不仅仅是字符串。它包含与之相关的字体、大小、颜色和其他样式信息。在Word中,样式是这些属性的集合。一个Run对象是相同样式文本的延续。当文本样式发生改变时,就需要一个新的Run对象。

c:\python\Scripts>pip3.6 install python-docx
Collecting python-docx
  Downloading python-docx-0.8.6.tar.gz (5.3MB)
    100% |████████████████████████████████| 5.3MB 73kB/s
Collecting lxml>=2.3.2 (from python-docx)
  Downloading lxml-4.1.1-cp36-cp36m-win_amd64.whl (3.5MB)
    100% |████████████████████████████████| 3.6MB 39kB/s
Installing collected packages: lxml, python-docx
  Running setup.py install for python-docx ... done
Successfully installed lxml-4.1.1 python-docx-0.8.6

读取Word文档

使用len()得到paragraphs的个数。

每个paragraph对象都有一个text属性,包含该段中的文本的字符串(没有样式信息)。

每个paragraph对象也有一个runs属性,它是run对象的列表。

run对象也有一个text属性,包含那个延续中的文本。

run表示的是不同样式的文本。

c:\python>python
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import docx
>>> doc=docx.Document('Gettysburg Address.docx')
>>> len(doc.paragraphs)
4
>>> doc.paragraphs[0].text
'Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.'
>>> doc.paragraphs[-1].text
''
>>> len(doc.paragraphs[0].runs)
1
>>> doc.paragraphs[0].runs[0].text
'Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.'
>>>

从文件中取得完整的文本

如果只关心word文档中的文本,不关心样式信息,就可以利用getText()函数。

它接受一个.docx文件名,返回其中文本的字符串。

可以通过在append()方法中增加空格,形成段落缩进。

>>> import docx
>>> doc=docx.Document('Gettysburg Address.docx')
>>> fullText=[]
>>> for para in doc.paragraphs:
...     fullText.append(para.text)
...
>>> print(fullText)
['Four score and seven years ago our fathers brought forth on this continent, ......hall not perish from the earth.', '']
>>>

设置Paragraph和Run对象的样式

对于word文档,有3种类型的样式:段落样式可以应用于paragraph对象,字符样式可以应用于run对象,链接的样式可以应用于这两种对象。

在设置style属性时,不要在样式名称中使用空格。

如果对run对象应用链接的样式,需要在样式名称末尾加上‘char’。

在当前版本的python-docx(0.7.4)中,只能使用默认的word样式,以及打开的文件中已有的样式,不能创建新的样式。

写入Word文档

在添加完文本后,向Document对象的save()方法传入一个文件名字符串,将Document对象保存到文件。

可以用新的段落文本,再次调用add_paragraph()方法添加段落。

>>> import docx
>>> doc=docx.Document('Gettysburg Address.docx')
>>> doc.add_paragraph('Hello world!')
<docx.text.paragraph.Paragraph object at 0x0000019B5DD45B70>
>>> doc.save('newdoc.docx')

效果:

如果要在已有段落的末尾添加文本,可以调用paragraph对象的add_run方法,向它传入一个字符串。

add_paragraph()和add_run()都接受可选的第二个参数,它是表示Paragraph或Run对象样式的字符串。

>>> import docx
>>> doc=docx.Document('Gettysburg Address.docx')
>>> doc.add_paragraph('Hello world!')
<docx.text.paragraph.Paragraph object at 0x0000019B5D57ABE0>
>>> paraObj1=doc.add_paragraph('This is a second paragraph.')
>>> paraObj2=doc.add_paragraph('This is a yet another paragraph.')
>>> paraObj1.add_run('This text is being added to the second paragraph.')
<docx.text.run.Run object at 0x0000019B5DD5B940>
>>> doc.save('newdoc2.docx')

效果:


添加标题

调用add_heading()将添加一个段落,并使用一种标题样式。

add_heading()的参数,是一个标题文本的字符串,以及一个从0-4的整数。

整数0表示标题是Title样式,这用于文档的顶部。

整数1-4是不同的标题层次,1是主要的标题,4是最低层的子标题。

add_heading()返回一个Paragraph对象。

>>> import docx
>>> doc=docx.Document()
>>> doc.add_heading('Header 0',0)
<docx.text.paragraph.Paragraph object at 0x0000019B5E1740F0>
>>> doc.add_heading('Header 1',1)
<docx.text.paragraph.Paragraph object at 0x0000019B5E1740B8>
>>> doc.add_heading('Header 2',2)
<docx.text.paragraph.Paragraph object at 0x0000019B5E174978>
>>> doc.add_heading('Header 3',3)
<docx.text.paragraph.Paragraph object at 0x0000019B5E174198>
>>> doc.add_heading('Header 4',4)
<docx.text.paragraph.Paragraph object at 0x0000019B5E1740F0>
>>> doc.save('headings.docx')

效果:

添加换行符和换页符

要添加换行符,可以在run对象上调用add_break()方法。

要添加换页符,可以将docx.text.WD_BREAK.PAGE作为唯一的参数,传递给add_break()。

>>> import docx
>>> doc=docx.Document()
>>> doc.add_paragraph('This is on the first page!')
<docx.text.paragraph.Paragraph object at 0x0000019B5DD5B400>
>>> doc.paragraphs[0].runs[0].add_break()
>>> doc.add_paragraph('This is the new text!')
<docx.text.paragraph.Paragraph object at 0x0000019B5DD5B400>
>>> doc.save('break.docx')

效果:

添加图像

Document对象有一个add_picture()方法,在文档末尾添加图像。

>>> import docx
>>> doc=docx.Document()
>>> doc.add_paragraph('This is on the first page!')
<docx.text.paragraph.Paragraph object at 0x0000019B5E189080>
>>> doc.add_picture('123.jpg',width=docx.shared.Inches(1),height=docx.shared.Cm(4))
<docx.shape.InlineShape object at 0x0000019B5E1899E8>
>>> doc.save('picture.docx')

效果:

时间: 2024-07-31 00:22:39

处理Word文档的相关文章

将ppt幻灯片转为Word文档的简单应用

工作之后你就会明白做好ppt的重要性,因为工作中需要制作ppt的时候很多.有时候我们也会遇到要将ppt转换成word的时候, PPT幻灯片文件的应用特别广泛,上学时老师上课会用它辅助讲解,上班后会议室的老板会用它展示他想表达的关键词.同时,不仅可以在计算机上进行演示,也可以在投影仪上演示,也可以把演示文稿打印出来,制作成胶片.如果我们需要将PPT转换成Word,该怎么转换呢? 下面就和大家简单说说转换的步骤. 1.先下载一个pdf转换器,打开下载好的软件,在主页面的左侧需要选择文件类型,这里我们

怎样能够轻松将ppt转为word文档

现在的办公中,有三个最常用的办公文档就是Word.Excel.PPT,三者间也存在着密切的关系,一般情况下 我们会把制作好的PPT文档转换成成Word文档以便携带和交流.相信很多人都想知道方法,但对于小白来说,看到一大堆资料时,都会头疼不已,那怎样可以很好大将ppt转换成word文档?下面就跟大家具体的介绍下如何来转换文档格式. 这里需要应用到文档的格式转换工具--迅捷pdf转换器.通常来说,转换单个PDF文件几乎可以在瞬间完成,不会感受到任何转换过程的停顿,即便针对超大容量以及复杂的内容的PD

怎么把Word文档转为PDF格式

怎么把Word文档转为PDF格式?现在的人大多数都喜欢用PDF格式来进行阅读,这是因为PDF文件有不错的视觉阅读性和保护性.但对于文员编辑来说,Word文档才是他们编辑资料的主要工具.有时候为了保障文件资料的安全,我们需要把编辑好Word文档转换成PDF格式,这样做主要是为了方便阅读和进行编辑和修改,同时大大的提高了我们的工作效率.那么问题来了,怎么把Word文档转为PDF格式呢?下面我们就一起来看看下面的介绍! 其实我们只需要一款专业的转换器就可以将Word文档转换成PDF格式."迅捷PDF转

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

Java生成word文档

itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址:http://download.csdn.net/detail/xuxu198899223/7717717 package word; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arra

黄聪:利用Aspose.Word控件实现Word文档的操作(转)

撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出

java使用freemarker生成word文档

1.原料 开源jar包freemarker.eclipse.一份模板word文档 2.首先设计模板word文档 一般,通过程序输出的word文档的格式是固定的,例如建立一个表格,将表格的标题写好,表格的内容使用不同的标记标好,设计好word后,将word文档另存为xml文件(注:只有word2003 以上的版本可以),使用xml工具打开文件,将要输出到word的内容使用${XX}替换,保存后将文件直接改为tdl后缀 3.使用eclipse编写程序 1)获得一个Configuration实例,并为

OpenXml入门----给Word文档添加文字

使用OpenXml给word文档添加文字,每个模块都有自己对于的属性以及内容,要设置样式就先声明属性对象,将样式Append到属性里面,再将属性append到模块里面,那么模块里面的内容就具备该样式了.此方法默认是在文件后面追加内容 Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Docum

支持Word文档和其他文件格式间的转换的控件Spire.Doc for .NET

Spire.Doc for .NET是e-iceblue公司推出的一款专门对Microsoft Word 文档进行操作的.NET类控件.这款控件的主要功能在于帮助开发人员轻松快捷地生成.编辑和查看Word文档.同时,开发人员还可以通过使用Spire.Doc for .NET 设置Word文档的格式,插入图片,表格,超链接等.Spire.Doc for .NET 最大的便利之处在于它不依赖于Microsoft Word以及任何其他第三方软件.只需将此款控件安装在您的电脑上,您就可以对word文档进

多人协作时编辑word文档的一个小窍门

多人协作时编辑word文档的一个小窍门 最近在工作中编写标书时由于不同内容分给了各个部门去制作,但是在汇总后遇到再次修改的问题.对方把修改后的部分文档发给我粘贴到标书中后,所有的格式全部都乱了.重新整理格式.标题,每次导入新的文档都重复这个工作,真是低效啊.事后想想word这么高级的文档编辑工具,肯定会有解决办法吧? 解决办法一 文档合并 将每个章节划分为多个文档,文档名称命名为章节编号,然后: 我们需要新建一个word文档并对这个文档的页面进行设置,使之与要合并的其他文档的页面设置保持一致,或