Python Excel 操作模块 XlsxWriter 之插入图片 worksheet.insert_image()

在最近的项目上有遇到一个需求:需要将图片写到 execl 中。这里和大家分享一下。

worksheet.insert_image()

insert_image**(row, col, image[, options])**
在工作表单元格中插入一张图片。

参数:

  • row(int) - 单元格所在的行(索引从 0 开始计数)
  • col(int) - 单元格所在的列(索引从 0 开始计数)
  • image(string) - 图片文件名(如有需要含路径)
  • options(dict) - 可选的图片位置,缩放,url 参数

这种方法可用于向工作表插入图片。图片可以是 PNG, JPEG 或者 BMP 格式的:

worksheet.insert_image('B2', 'python.png')

文件路径可与图片文件名一起指定:

worksheet1.insert_image('B10', '../images/python.png')
worksheet2.insert_image('B20', r'c:\images\python.png')

insert_image() 方法接受字典形式的可选参数来定位和缩放图片。可用的参数和它们的默认值有:


{
    'x_offset': 0,
    'y_offset': 0,
    'x_scale': 1,
    'y_scale': 1,
    'url': None,
    'tip': None,
    'image_data': None,
    'positioning': None,
}

offset 的值是以像素为单位的:

worksheet1.insert_image('B2', 'python.png', {'x_offset': 15, 'y_offset': 10'})

offset 的值可以大于基础单元格的宽度与高度。如果想将两个及以上的图片相对于同一单元格对齐,这有时会很有用。

x_scale 和 y_scale 参数可以用于水平及垂直的缩放图片:

worksheet.insert_image('B3', 'python.png', {'x_scale': 0.5, 'y_scale': 0.5})

url 参数可以为图片添加超链接 /url,tip 参数为含有超链接的图片提供可选的鼠标悬停时的提示信息:

worksheet.insert_image('B4', 'python.png', {'url': 'http://python.org'})

image_data 参数用于在 io.BytesIO 中添加内存中的字节流:

worksheet.insert_image('B5', 'python.png', {'image_data': image_data})

这通常用来从 URL 中添加图片:

url = 'http://python.org/logo.png'
image_data = io.BytesIO(urllibs.urlopen(url).read())
worksheet.insert_image('B5', url, {'image_data': image_data})

当使用 image_data 参数时文件名必须传递到 insert_image() 因为这是 Excel 要求的。在前面的例子中文件名是从 URL 字符串中提取的。

positioning 参数可以用来控制图片对象的位置:

worksheet.insert_image('B3', 'python.png', {'positioning': 1})

postioning 有以下允许的值:

1. 移动和调整单元格的大小

2. 移动但不调整单元格的大小(默认)

3. 不移动或调整单元格的大小

注意:

如果由于字体大小大于默认字体大小或者打开了文本换行而导致更改了默认行高,则图片的缩放可能会受到影响。
如果它与插入的图像交叉,你应该使用 set_row() 方法明确的设定行高来避免此问题。

BMP 图片只向后兼容。由于 BMP 图片不能压缩,通常情况下最好避免使用 BMP 图片。如果使用 BMP 图片,必须是 24bit、true color、bitmap 的。

实例:向工作表插入图片*

import xlsxwriter

# 创建一个新Excel文件并添加一个工作表。
workbook = xlsxwriter.Workbook('excel插入images.xlsx')
worksheet = workbook.add_worksheet()

# 加宽第一列使文本更清晰。
worksheet.set_column('A:A', 30)

# 插入一张图片。
worksheet.write('A2', '向单元格插入一张图片:')
worksheet.insert_image('B2', '1.jpg',{'x_scale': 2, 'y_scale': 2})

# 插入一张位偏移图片。
worksheet.write('A26', '插入一张位偏移图片:')
worksheet.insert_image('B26', '2.jpg', {'x_offset': 5, 'y_offset': 1})

# 插入一张缩放了的图片。
worksheet.write('A50', '插入一张缩放了的图片:')
worksheet.insert_image('B50', '3.jpg',{'x_offset': 5, 'y_offset': 1,'x_scale': 0.5, 'y_scale': 0.5})

workbook.close()  #保存

Python Excel 操作模块 XlsxWriter 之插入图片 worksheet.insert_image()