'How can I change the image's positioning: "Move and size with cells" in Excel with openpyxl

enter image description here

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