我循环遍历工作簿中的每个单元格。出于某种原因,当openpyxl遍历包含图像的工作表时,图像将被删除。如何解决这个问题?
我正在寻找一种方法来传递带有图像的单元格。
我不在read_only
模式,并且不希望成为,因为我正在对工作表进行修改。
这样的事情对我来说最有用:
if cell is image:
pass
答案 0 :(得分:1)
documentation明确指出会发生这种情况:
警告强>
openpyxl当前没有读取Excel文件中的所有可能项目,因此如果打开并以相同名称保存,图像和图表将从现有文件中丢失。
[强调我的]
这与图像和图表不是常规单元格内容并存储在文件的单独部分中这一事实有关。写入图像的功能在那里,但不是为了阅读它们。
您的选择是等待开发人员实现该功能,使用不同的库,或者自己提供补丁。
更现实的选择可能是将您所做的修改写入不同的文件,然后手动将非图像部分复制回原始部分。
理想情况下,在您的情况下这似乎是正确的,您可以从电子表格外部获得图像。在这种情况下,您可以在编写文件时将它们重新插入。
另一个可能的解决方法是将原始文件作为zip文件打开并从中提取图像(手动或以编程方式)。
答案 1 :(得分:0)
https://pypi.org/project/openpyxl-image-loader/
from openpyxl import load_workbook
from openpyxl_image_loader import SheetImageLoader
# Load your workbook and sheet as you want, for example
wb = load_workbook('path_to_file.xlsx')
sheet = wb['required_sheet']
# Put your sheet in the loader
image_loader = SheetImageLoader(sheet)
# And get image from specified cell
image = image_loader.get('A3')
# Image now is a Pillow image, so you can do the following
image.show()
# Ask if there's an image in a cell
if image_loader.image_in('A4):
print("Got it!")