docx模块
官方地址
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库操作文档,最近碰到,当往文档中插入表格时,随着表格行数的增多,生成表格的速度越来越慢,在网上搜索好久都没有找到相应的解决方法,今天我分享我解决的方法。
在网上生成表格比较多的方式时如下代码:
这种方式是我们先生成一个1行7列的表格,然后后续一行一行的在表格中添加数据,这样就会导致我们每加入一次数据,就会重新重载一次表格,随着数据越多,重载表格的时间就越久,这样的们生成文档的时间可以想象会要多久,严重影响我们的效率,我们运行看一下耗时多久:
image.png总共花费了232秒的时间,这只是1000行的数据和比较简单的文本。
改进以后我们用如下代码操作,我们先一次性生成一个1000行7列的表格,然后根据索引值,一次往表格中填数据,这样就不用每次插入数据时就重载表格了,我们看一下他的耗时时间:
image.png image.png整理不易,请小编喝杯咖啡吧
听说打赏我的人,都进了福布斯排行榜
image