提取超出 Z 列的图像会在 Openpyxl 中返回 SheetImageLoader 错误

问题描述 投票:0回答:1

我有一个 xlsm 文件,其中图像位于 Z 列之外。我想使用 openpyxl-image-loader 从此文件中提取图像,但我在 [my] 函数中遇到问题,该函数返回错误;

SheetImageLoader** *IndexError: string index out of range

我在github上看到了一个解决方案:他们说要编辑库代码中的一行

col = string.ascii_uppercase\[image.anchor.\_from.col\]

col = openpyxl.utils.cell.get_column_letter(image.anchor.\_from.col + 1)

我已经编辑过了,但是不起作用。
还有其他解决办法吗?

python openpyxl
1个回答
0
投票

要使用 openpyxl-image-loader 从 xlsm 文件中提取图像,您需要确保加载该文件时 read_only 和 keep_vba 标志设置为 True。这将在工作簿中保留图像及其锚点。例如:

from openpyxl import load_workbook
from openpyxl_image_loader import SheetImageLoader
wb = load_workbook (filename = "file.xlsm", read_only = True, keep_vba = True)
ws = wb ["Sheet1"]
image_loader = SheetImageLoader (ws)

然后,您可以使用 image_loader.get(row, col) 方法来获取给定单元格的图像。 row 和 col 参数应该是整数,而不是字符串。例如,要获取单元格 AA1 处的图像,您可以使用:

image = image_loader.get (1, 27) # 27 is the column number for AA

如果单元格中有图像,则 image_loader.get(row, col) 方法将返回 PIL Image 对象,如果没有图像,则返回 None。然后,您可以将图像保存到文件中或根据需要显示它。例如:

if image is not None:
    image.save ("image.png")
else:
    print ("No image at this cell")

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.