'How can I change the image's positioning: "Move and size with cells" in Excel with openpyxl
How can I select this image property with Python using Openpyxl? I need this so if I filter the Excel doc, the images will be filtered too.
I call a function i did: insert_image(ws, url, cell_picture, 64, 66)
ws is the sheet I am adding
url is the image
cell_picture the cell
64 and 66 the width and height
My function is this:
def insert_image(ws, image_url, cell, width = 101, height= 129):
# load image
image_path = "image.jpg"
try:
urllib.request.urlretrieve(image_url, image_path)
img = Image.open(image_path)
except:
print ('Picture ' + image_url + ' not found')
return
max_width, max_height = width , height
cell_ratio = float(max_height) / max_width
img_ratio = float(img.size[1])/img.size[0]
if (cell_ratio<img_ratio):
hpercent = (max_height/float(img.size[1]))
wsize = int((float(img.size[0])*float(hpercent)))
img = img.resize((wsize,max_height-1), PIL.Image.ANTIALIAS)
else:
wpercent = (max_width/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((max_width,hsize), PIL.Image.ANTIALIAS)
# remove image
if os.path.isfile(image_path): os.remove(image_path)
# Create openpyxl img instace
op_img = imge(img)
# Create image anchor
op_img.anchor(cell, anchortype='oneCell')
op_img.drawing.top = 1
#op_img.drawing.left = 1
# Add image to cell
ws.add_image(op_img)
#ws.insert_image(cell,op_img,{'positioning':1})
# print ('Image inserted')
return
Solution 1:[1]
TwoCellAnchor(editAs="twoCell", ...)
example code:
# *- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, TwoCellAnchor
wb = Workbook()
ws = wb.active
ws.column_dimensions["A"].width = 18
ws.row_dimensions[1].height = 140
col, row = 0, 0
offset = 30000
img = Image("test.jpg")
_from = AnchorMarker(
col=col,
row=row,
colOff=offset,
rowOff=offset,
)
to = AnchorMarker(
col=col + 1,
row=row + 1,
colOff=-offset,
rowOff=-offset,
)
img.anchor = TwoCellAnchor(editAs="twoCell", _from=_from, to=to)
ws.add_image(img)
wb.save("test.xlsx")
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | user10500529 |

