调整Excel单元格的大小以适合图像

时间:2018-06-20 10:27:03

标签: python excel xlsxwriter

当我将图像写入excel文件时,我需要使图像适合一个excel单元格。我知道图像的大小(以像素为单位),但是我不知道如何使用xlsxwriter调整excel单元的高度和宽度,以使我的图像完全适合该单元。

2 个答案:

答案 0 :(得分:1)

提供了一个示例,说明如何使用PIL(Python Imaging Library-Link to docs)按比例缩小图像,然后使用xlsxwriter将其放置在.xlsx文件中。通过此示例,您可以看到如何使用PIL调整图像的大小,然后使用worksheet.set_column()worksheet.set_row()来调整像元大小以适应图像的大小。

因此,可以有效地调整图像的大小,调整Excel单元格的大小或同时执行这两项操作。要进行适当的拟合,可能需要进行一些测试。

为了使此答案可重复,我使用urllib模块将图像下载到本地目录(如果使用本地文件,则不需要该模块)。

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_30 = int(round(width_100 * 0.3, 0))
img = Image.open('local_100_perc.png')
wpercent = (width_30/float(width_100))
hsize = int((float(height_100)*float(wpercent)))
img = img.resize((width_30,hsize), Image.ANTIALIAS)
img.save('local_30_perc.png') 

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:B', 10)
worksheet.set_row(1, 70)
worksheet.write('A2', 'Image:')
worksheet.insert_image('B2', 'local_30_perc.png')

workbook.close()

具有预期的输出:

Expected test.xlsx

答案 1 :(得分:0)

以像素为单位设置单元格大小似乎非常棘手。正如 xlsxwriter's docsMicrosoft excel's docs 中所述。

<块引用>

width 参数以相同的单位设置列宽 Excel 即:默认字体中的字符数。这 在 Calibri 11 的默认字体中,默认宽度为 8.43。实际 Excel中字符串宽度和列宽的关系是 复杂的。请参阅以下对列宽的说明 Microsoft support documentation 了解更多详情。

最糟糕的是单位宽度的像素等效值与单位高度的像素等效值不同,即高度的500个单位为4000个像素,宽度的500个单位约为400个像素。这些比率也是可变的。所以对你来说可能会有所不同。 但是当您获得行或列的大小时,xlsxwriter 返回像素值。也许通过反复试验,可以找到最佳的高度和宽度单位。

import xlsxwriter
workbook = xlsxwriter.Workbook('excel.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column(0, 0, 50)
worksheet.set_row(0, 50)
c = worksheet._size_col(0)
r = worksheet._size_row(0)
print(r, c)
workbook.close()

结果是:

66 355