代码之家  ›  专栏  ›  技术社区  ›  user3606682

使用xlwt Python Odoo插入图像?

  •  1
  • user3606682  · 技术社区  · 7 年前

    我用的是奥多10。我正在尝试使用xlwt库在excel表中插入徽标图像。我尝试了以下链接中的解决方案,但它不适用于我。

    Insert an image base 64 on excel using xlwt

    我的代码:

    from PIL import Image
    
    img = Image.open("/my_module/static/description/logo.png")
    r, g, b, a = img.split()
    img = Image.merge("RGB", (r, g, b))
    img.save('imagetoadd.bmp')
    xlwt.insert_bitmap('imagetoadd.bmp', 0, 0)
    

    错误:

    我已经仔细检查了我的路径和拼写是否正确,我已经重新启动了服务器,也升级了。

    当我给出这样的完整路径时: /home/username/folder/custom addons/my_module/static/description/logo.png ValueError:需要3个以上的值才能解包

    请帮助我如何使用xlwt将图像插入excel工作表。谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   arryph    7 年前

    ValueError: need more than 3 values to unpack 发生错误的原因可能是 img.split() unpacking 到4个变量, r g b a . 检查长度 img.split() 相应地返回并分配给变量,或者使用索引来访问前3个元素,如

    image_parts = img.split()
    r = image_parts[0]
    g = image_parts[1]
    b = image_parts[2]
    

    更新:

    from PIL import Image
    import xlsxwriter
    from io import BytesIO
    
    workbook   = xlsxwriter.Workbook('filename.xlsx')
    worksheet1 = workbook.add_worksheet()
    img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
    image_parts = img.split()
    r = image_parts[0]
    g = image_parts[1]
    b = image_parts[2]
    img = Image.merge("RGB", (r, g, b))
    fo = BytesIO()
    img.save(fo, format='bmp')
    worksheet1.insert_image('A1', 'python.png', {'image_data': fi})
    workbook.close()
    

    好的,我在中找到了必需的函数 xlwt 库的源代码。

    from PIL import Image
    import xlwt
    from io import BytesIO
    
    workbook   = xlwt.Workbook()
    worksheet1 = workbook.add_sheet('Test')
    img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
    image_parts = img.split()
    r = image_parts[0]
    g = image_parts[1]
    b = image_parts[2]
    img = Image.merge("RGB", (r, g, b))
    fo = BytesIO()
    img.save(fo, format='bmp')
    worksheet1.insert_bitmap_data(fo.getvalue(),0,0)
    workbook.save('filename.xls')
    img.close()