【问题标题】:Insert image in openpyxl在openpyxl中插入图像
【发布时间】:2012-06-04 21:58:28
【问题描述】:

是否可以使用 openpyxl 插入图像(jpeg、png 等)?

基本上我想在其下方放置一个带有图表的生成图像。

文档里没看到任何东西,相比于代码的成熟度,似乎有点欠缺。

【问题讨论】:

    标签: python xlsx openpyxl


    【解决方案1】:

    下面在单元格 A1 中插入一个图像。根据您的需要调整图像位置或自己处理 PIL 图像的创建并将其交给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')
    

    在旧版本的 openpyxl 中,以下工作:

    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')
    

    【讨论】:

    • 支持 gif 文件吗?
    • 我正在使用 Xlsxwriter,它不支持嵌入 gif 图像,所以我想知道 openpyxl 是否支持。
    • @user299709 我很清楚您对此感到疑惑。答案在于 PIL 支持哪些文件格式,我很难相信您自己使用 google 找不到。
    • 截至 2017 年,它看起来像:openpyxl.drawing.Image 已移至:openpyxl.drawing.image.Image
    • 截至 2019 年 img.anchor(ws.cell('A1')) 现在是 img.anchor = 'A1'
    【解决方案2】:

    在当前版本的 openpyxl(至少到 2.4.5)中,您必须像这样调用 Image:

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

    以 Anthon 为例:

    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')
    

    【讨论】:

    • 我收到以下代码错误:img.anchor(ws.cell('A1')) TypeError: cell() missing 1 required positional argument: 'column'
    • @virtualxtc 在较新版本的openpyxl中需要使用img.anchor = 'A1'
    【解决方案3】:

    提供有关如何执行此操作的完整更新。此解决方案使用 openpyxl 版本 2.4.5。

    我将一张图片下载到我的本地目录,打开了一个现有的工作簿并保存了插入的图片。

    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')
    

    结果:

    【讨论】:

    • ws.add_image(my_png, 'B3') 触发警告DeprecationWarning: Call to deprecated function anchor (Anchors can be passed in when an image is added to a worksheet). 知道如何解决吗?
    • 使用 openpyxl 版本 2.5.5 和 2.5.6(最新的稳定版本),我无法重现此警告,运行我的示例中发布的代码。
    • 我的 openpyxl 版本较新。我会确保更新它
    【解决方案4】:

    这段代码对我有用:

    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')
    

    【讨论】:

      【解决方案5】:

      补充一下,我一直在使用 openpyxl==2.5.6(使用 Python3.65),我不得不使用 img.anchor('A1') 而不是 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')
      

      【讨论】:

        猜你喜欢
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2014-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多