接上文Python开发从零开始-50.12-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。
(2)在指定位置插入图片
1)插入图片的步骤
① 创建图片对象;
② 根据需要调整图片大小或单元格尺寸以适应图片;
③ 使用工作表的 add_image() 方法,在指定位置插入图片。
2)创建图片对象
openpyxl.drawing.image.Image(图片对象)表示 Excel 工作表中的图片。Image 对象依赖 Pillow 库(Python Imaging Library 的一个分支)来处理图像,所以需要先安装该库。
pip install PillowPillow 安装后,就可以创建 Image 对象,通常使用以下语法创建 Image 对象:
参数解释:
filename:字符串,图片的文件路径名;
返回值:Image 对象。
创建 Image 对象的代码示例如下:
# 图片文件路径img_path = 'dog.png'# 创建Image对象img = Image(img_path)
3)设置图片大小及单元格尺寸
在数据可视化场景中,可能会根据实际需求对 Excel 文档中的图片设置大小,并调整单元格尺寸,以达到最佳显示效果。
① 设置图片大小
Image 对象提供了 width 属性和 height 属性用于获取和设置图片宽度和高度(以 EMUs 为单位)。如果未对这两个属性进行设置,则返回的是图片文件的原始大小。
设置图片大小的代码示例如下:
# 设置图片大小,单位是 EMUsimg.width, img.height = 200, 200
② 调整单元格尺寸
单元格尺寸可以通过调整工作表指定列宽和指定行高来实现,这通常会使用以下对象和属性:
openpyxl.worksheet.dimensions.ColumnDimension(列维度对象):用于定义列维度属性的类,常用属性包括 width(列宽,整型,EMUs 为单位)、hidden(是否隐藏,布尔型)等;
openpyxl.worksheet.dimensions.RowDimension(行维度对象):用于定义单行维度属性的类,常用属性包括 height(行高,整型,EMUs 为单位)、hidden(是否隐藏,布尔型)等;
openpyxl.worksheet.dimensions.DimensionHolder(维度容器对象):管理工作表行或列维度的容器类,通常不直接实例化,而是通过工作表的 row_dimensions 或 column_dimensions 属性访问。使用字典式访问可返回对应列、行维度对象,例如:
ws.column_dimensions['A'] 返回对应 ColumnDimension 对象;
ws.column_dimensions[1] 返回对应 RowDimension 对象。
Worksheet.row_dimensions 属性:返回 DimensionHolder 对象;
Worksheet.column_dimensions 属性:返回 DimensionHolder 对象。
调整单元格尺寸的代码示例如下:
# 设置列宽(例如:设置 A列的宽度为 20 pt)ws.column_dimensions['A'].width = 20# 设置行高(例如:设置第1行的行高为 30 pt)ws.row_dimensions[1].height = 30
③ 图片大小和单元格尺寸的换算
原始图片大小(如 dog.png)通常使用像素(px)为单位;openpyxl 的图片大小使用 EMUs(English Metric Units,英制公制单位) 为单位;Excel 的单元格尺寸列宽使用字符宽度为单位(即一个数字 “0” 在默认字体下的宽度),行高使用 pt(point,中文常称为 “磅”)为单位;所以在实际项目中,直接换算极难达到所谓公式换算得到的预期,需要开发者调试测试以取得符合预期效果。
4)使用 add_image() 方法插入图片
工作表的 add_image() 方法用于在指定位置插入图片,原型如下:
add_image(img, anchor=None) |
参数解释:
img:Image 对象;
anchor 可选:指定图像插入的锚点(插入单元格位置),例如,'A1' 表示第一行第一列。
在指定位置插入图片的代码示例如下:
# 将图片添加到工作表ws.add_image(img)
5)插入图片的完整代码示例
from openpyxl import Workbookfrom openpyxl.utils import get_column_letterfrom openpyxl.drawing.image import Imagewb = Workbook()ws = wb.active# 图片文件路径img_path = 'dog.png'# 创建Image对象img = Image(img_path)img.anchor = 'A1' # 设置锚点为 A1单元格# 设置图片大小,单位是 EMUsimg.width, img.height = 200, 200# 设置列宽(例如:设置 A 列的宽度为 30 字符宽度)ws.column_dimensions['A'].width = 30# 设置行高(例如:设置第 1 行的行高为 180 pt)ws.row_dimensions[1].height = 180# 将图片添加到工作表addi = ws.add_image(img)# 保存工作簿wb.save("excle_sytle2.xlsx")
代码执行后会新建 excle_sytle2.xlsx 文档,其文档内容如下所示:

受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件的相关知识。
夜雨聆风