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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jacke121/article/details/84933726

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')


 

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

 
  1. worksheet1.insert_image('B10', '../images/python.png')

  2. worksheet2.insert_image('B20', r'c:\images\python.png')

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

 
  1. {

  2. 'x_offset': 0,

  3. 'y_offset': 0,

  4. 'x_scale': 1,

  5. 'y_scale': 1,

  6. 'url': None,

  7. 'tip': None,

  8. 'image_data': None,

  9. 'positioning': None,

  10. }

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后,excel筛选图片就能一起筛图片,默认值2筛选图片就会重叠

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

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

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

注意:

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

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

例:向工作表插入图片

这是一个向工作表插入图片的例子。

 
  1. ##############################################################################

  2. #

  3. # An example of inserting images into a worksheet using the XlsxWriter

  4. # Python module.

  5. #

  6. # Copyright 2013-2017, John McNamara, [email protected]

  7. #

  8. import xlsxwriter

  9.  
  10.  
  11. # 创建一个新Excel文件并添加一个工作表。

  12. workbook = xlsxwriter.Workbook('images.xlsx')

  13. worksheet = workbook.add_worksheet()

  14.  
  15. # 加宽第一列使文本更清晰。

  16. worksheet.set_column('A:A', 30)

  17.  
  18. # 插入一张图片。

  19. worksheet.write('A2', '向单元格插入一张图片:')

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

  21.  
  22. # 插入一张位偏移图片。

  23. worksheet.write('A12', '插入一张位偏移图片:')

  24. worksheet.insert_image('B12', 'python.png', {'x_offset': 15, 'y_offset': 10})

  25.  
  26. # 插入一张缩放了的图片。

  27. worksheet.write('A23', '插入一张缩放了的图片:')

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

  29.  
  30. workbook.close()

例:从URL或字节流向工作表插入一张图片

这是一个是从Python io.BytesIO 字节流向工作表插入图片的例子。

此例中的字节流从URL和本地文件填充。

 
  1. ##############################################################################

  2. #

  3. # An example of inserting images from a Python BytesIO byte stream into a

  4. # worksheet using the XlsxWriter module.

  5. #

  6. # Copyright 2013-2017, John McNamara, [email protected]

  7. #

  8.  
  9. # 导入字节流处理器(byte stream handler.)

  10. from io import BytesIO

  11.  
  12. # 从Python 2或3之一导入urlopen()

  13. try:

  14. from urllib.request import urlopen

  15. except ImportError:

  16. from urllib2 import urlopen

  17.  
  18.  
  19. import xlsxwriter

  20.  
  21. # 创建一个工作簿并添加一个工作表。

  22. workbook = xlsxwriter.Workbook('images_bytesio.xlsx')

  23. worksheet = workbook.add_worksheet()

  24.  
  25.  
  26. # 从远端URL读取图片。

  27. url = 'https://raw.githubusercontent.com/jmcnamara/XlsxWriter/' + \

  28. 'master/examples/logo.png'

  29.  
  30. image_data = BytesIO(urlopen(url).read())

  31.  
  32. # 向单元格写入字节流图片。注意,文件名必须显式指定。在这个例子中文件名会从URL字符串读取。

  33. worksheet.insert_image('B2', url, {'image_data': image_data})

  34.  
  35.  
  36. # 读取本地图片文件至字节流。注意,insert_image()方法可以直接这么干,此例只是为了演示。

  37. filename = 'python.png'

  38.  
  39. image_file = open(filename, 'rb')

  40. image_data = BytesIO(image_file.read())

  41. image_file.close()

  42.  
  43.  
  44. # 将字节流图片写入单元格,文件名必须显式指定。

  45. worksheet.insert_image('B8', filename, {'image_data': image_data})

  46.  
  47.  
  48. workbook.close()

猜你喜欢

转载自blog.csdn.net/jacke121/article/details/84933726