最全总结 | 聊聊 Python 办公自动化之 Word(上) (2)

无序列表:List Bullet

def add_list(document, data, isorder): """ 将列表数据添加到无序列表/有序列表中 :param document: 文档对象 :param data: 列表数据 :param isorder: 是否有序列表 :return: """ # 无序列表 if not isorder: for item in data: document.add_paragraph(item,) else: # 有序列表 for item in data: document.add_paragraph(item,) # 2.3 列表 # 2.3.1 无序列表 add_list(doc, ["无序-Item1", "无序-Item2", "无序-Item3"], False) # 2.3.2 有序列表 add_list(doc, ["有序-Item1", "有序-Item2", "有序-Item3"], True)

接下来,我们看看如何在文档中插入图片

使用方法:

add_picture(image,widht,height)

其中,

第 1 个参数代表图片路径或者图片流(网络图片)

第 2、3 个参数用于设置图片的宽、高

需要注意的是,如果没有显式指定宽高,则以图片原生尺寸展示;如果仅设置了其中一个,则会按照设置的一个做等比缩放显示

写入本地图片很简单

def add_local_image(doc, image_path, width=None, height=None): """ 增加本地图片到Word文档中 :param doc: :param image_path: :param width: :param height: :return: """ doc.add_picture(image_path, width=None if width is None else Inches(width), height=None if height is None else Inches(height)) # 2.4.1 插入本地图片 add_local_image(doc, './1.png', width=2)

对于网络图片,我们需要先通过网络图片地址,获取图片字节流,传入到第一个参数中即可

import ssl from io import BytesIO def get_image_data_from_network(url): """ 获取网络图片字节流 :param url: 图片地址 :return: """ ssl._create_default_https_context = ssl._create_unverified_context # 获取网络图片的字节流 image_data = BytesIO(urlopen(url).read()) return image_data def add_network_image(doc, image_url, width=None, height=None): """ 增加本地图片到Word文档中 :param doc: :param image_url: :param width: :param height: :return: """ # 获取图片流 image_data = get_image_data_from_network(image_url) doc.add_picture(image_data, width=None if width is None else Inches(width), height=None if height is None else Inches(height)) # 2.4.2 插入网络图片 url = '图片URL地址' add_network_image(doc, url, width=3)

最后,我们看看如何在文档中插入表格

使用方法:

add_table(row_num,column_num,style=None)

返回值:表格对象 <class 'docx.table.Table'>

其中,

第 1 个参数:表格的行数目

第 2 个参数:表格的列数目

第 3 个参数:表格的样式

使用行/列索引,可以获取表格中某一行/列所有的单元格对象组成的列表

# 添加一个table表格 table = doc.add_table(***) # 通过行/列索引,获取某一行/列的所有单元格对象 # 第一行所有单元格对象列表 head_cells = table.rows[0].cells

另外,表格对象使用 add_row()、add_column() 方法可以追加一行/列

以指定表头、表数据,插入一张表为例

def add_table(doc, head_datas, datas, style=None): """ 新增一个表格 :param doc: :param head_datas: 表头 :param datas: 数据 :param style: :return: """ # 新增一个表格 # 表格所有样式大全:https://blog.csdn.net/ibiao/article/details/78595295 # 默认样式为:Table Grid table = doc.add_table(rows=1, cols=len(head_datas), style=("Table Grid" if style is None else style)) # 第一行所有单元格对象列表 head_cells = table.rows[0].cells # 写入数据到表头中 for index, head_item in enumerate(head_datas): head_cells[index].text = head_item # 遍历数据并写入数据 for data in datas: # 单独添加一行或者列:add_row、add_column row_cells = table.add_row().cells for index, cell in enumerate(row_cells): cell.text = str(data[index]) # 2.5 表格 head_datas = ["姓名", "年龄", "地区"] datas = ( ('张三', 18, '深圳'), ('李四', 28, '北京'), ('王五', 33, '上海'), ('孙六', 42, '广州') ) # 新增一个表格,并指定样式 # add_table(doc, head_datas, datas, style_table) add_table(doc, head_datas, datas)

需要指出的是,表格默认采用的样式是 Table Grid,也可以使用上面的方法自定义一个表格样式,插入表格的同时设置进去即可

4. 最后

本篇文章就 Word 写入数据的常规操作进行了一次全面梳理,更多功能包含:读取、修改、查找、删除等实战内容后面会持续输出

要获取全部源码,关注公众号「 AirPython 」,后台回复「 word 」即可获得全部源码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpds.html