Insert image in openpyxl

后端 未结 5 2017
不知归路
不知归路 2020-12-14 02:28

Is it possible to insert an image (jpeg, png, etc) using openpyxl?

Basically I want to place a generated image with a chart below it.

I don\'t see anything i

相关标签:
5条回答
  • 2020-12-14 02:42

    In current versions of openpyxl (up to 2.4.5 at least) you have to call Image like this:

    img = openpyxl.drawing.image.Image('test.jpg')

    Using Anthon's example:

    import openpyxl
    
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    img = openpyxl.drawing.image.Image('test.jpg')
    img.anchor(ws.cell('A1'))
    ws.add_image(img)
    wb.save('out.xlsx')
    
    0 讨论(0)
  • 2020-12-14 02:49

    This code worked for me:

    import openpyxl
    
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    ws.merge_cells('A1:A3')
    img = openpyxl.drawing.image.Image('image.jpg')
    row_number = 1
    col_idx = 1
    cell = ws.cell(row=row_number, column=col_idx)
    ws.add_image(img)
    wb.save('output.xlsx')
    
    0 讨论(0)
  • 2020-12-14 02:51

    Just to add, I have been using openpyxl==2.5.6 (with Python3.65), and I had to use img.anchor('A1') instead of img.anchor(ws.cell('A1')).

    import openpyxl
    
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    img = openpyxl.drawing.Image('test.jpg')
    img.anchor('A1')
    ws.add_image(img)
    wb.save('out.xlsx')
    
    0 讨论(0)
  • 2020-12-14 03:01

    The following inserts an image in cell A1. Adjust the image location to your needs or handle the creation of the PIL image yourself and hand that to Image()

    import openpyxl
    
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    img = openpyxl.drawing.image.Image('test.jpg')
    img.anchor = 'A1'
    ws.add_image(img)
    wb.save('out.xlsx')
    

    In older versions of openpyxl the following works:

    import openpyxl
    
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    img = openpyxl.drawing.Image('test.jpg')
    img.anchor(ws.cell('A1'))
    ws.add_image(img)
    wb.save('out.xlsx')
    
    0 讨论(0)
  • 2020-12-14 03:08

    Providing a full update on how to do this. This solution uses openpyxl version 2.4.5.

    I downloaded an image to my local directory, opened an existing workbook and saved with the image inserted.

    import openpyxl
    from openpyxl import load_workbook
    from openpyxl import Workbook
    from openpyxl.drawing.image import Image
    from openpyxl.utils import coordinate_from_string
    
    openpyxl_version = openpyxl.__version__
    print(openpyxl_version)  #to see what version I'm running
    
    # downloaded a .png to local directory manually from
    # "https://www.python.org/static/opengraph-icon-200x200.png"
    
    #change to the location and name of your image
    png_loc = r'c:\users\me\opengraph-icon-200x200.png'
    
    # test.xlsx already exists in my current directory 
    
    wb = load_workbook('test.xlsx')
    ws = wb.active
    my_png = openpyxl.drawing.image.Image(png_loc)
    ws.add_image(my_png, 'B3')
    wb.save('test.xlsx')
    

    Results:

    0 讨论(0)
提交回复
热议问题