Xlsxwriter调整标题图片

时间:2017-10-03 19:23:30

标签: python xlsxwriter

我在header.jpeg

中有一张图片

我想将该图像设置为excel文件的标头。 我正在使用模块pandas, numpy and xlsxwriter

代码看起来像这样

image_file = open('header.jpeg', 'rb')
image_data = xlsxwriter.compatibility.BytesIO(image_file.read())

worksheet.set_header('&C&G', {'image_center': 'header.jpeg','image_data_left': image_data})

它也适用于

worksheet.set_header('&C&G', {'image_center': 'header.jpeg'})

如何在标题中调整图像大小,让我们说它的高度为80%?

根据文档我发现我可以使用

  

http://xlsxwriter.readthedocs.io/page_setup.html

     

可用选项包括:

     

保证金:(浮动)标题边距(英寸)。默认为0.3英寸。   image_left:(string)图像的路径。需要& G占位符。   image_center :(字符串)与上面相同。 image_right :(字符串)与...相同   以上。 image_data_left:(BytesIO)图像数据的字节流。   image_data_center :( BytesIO)与上面相同。 image_data_right:   (BytesIO)同上。 scale_with_doc :( boolean)带有的缩放标题   文献。默认为True。 align_with_margins :( boolean)对齐标题   利润率。默认为True。

由于

2 个答案:

答案 0 :(得分:2)

  

如何在标题中调整图像大小,让我们说它的高度为80%?

XlsxWriter目前不支持。您可以打开功能请求,我会查看添加功能。

或者,您可以使用其他应用程序或模块缩小图像。

答案 1 :(得分:1)

只是想为您提供一个示例,说明如何使用xlsxwriter之外的其他模块缩小图像,然后使用xlsxwriter将其放在.xlsx文件中。这个例子有一个相当大的警告:它不适用于.jpeg,只能使用.png。但是,此示例允许您更改其原始图像大小的80%的高度,并将结果图像放在标题中。

它在此示例中使用urllib.request,以便代码可重现(如果您使用本地文件,则不需要该模块)。它还使用PIL(http://php.net/manual/en/xsltprocessor.transformtodoc.php)。

import urllib.request
from PIL import Image
import xlsxwriter
import os

url = 'https://upload.wikimedia.org/wikipedia/en/thumb/4/43/Ipswich_Town.svg/255px-Ipswich_Town.svg.png'

urllib.request.urlretrieve(url, "local_100_perc.png")

with Image.open("local_100_perc.png") as img:
    width_100 = img.width
    height_100 = img.height

width_80 = int(round(width_100 * 0.8, 0))

img = Image.open('local_100_perc.png')
wpercent = (width_80/float(width_100))
hsize = int((float(height_100)*float(wpercent)))
img = img.resize((width_80,hsize), Image.ANTIALIAS)
img.save('local_80_perc.png') 


workbook = xlsxwriter.Workbook('headers.xlsx')

worksheet1 = workbook.add_worksheet('Image_100_perc')
header1 = '&L&G'
worksheet1.set_margins(top=3.8)
worksheet1.set_header(header1, {'image_left': 'local_100_perc.png'})
worksheet1.write('A1', '100 percent image in Header.')

worksheet2 = workbook.add_worksheet('Image_80_perc')
header2 = '&L&G'
worksheet2.set_margins(top=3)
worksheet2.set_header(header2, {'image_left': 'local_80_perc.png'})
worksheet2.write('A1', '80 percent image in Header.')

workbook.close()

# uncomment next two lines if you want to delete both pictures from your current directory
#os.remove('local_100_perc.png')
#os.remove('local_80_perc.png')   

要在.xlsx文件中查看生成的图像,请将视图设置为'页面布局'来自'视图' tab(excel 2013)。