Openpyxl - 将图像转换为excel电子表格后出错,可能是style.xml的问题。

问题描述 投票:1回答:1

我想用python脚本把一张图片(*.jpg)转换成Excel的电子表格的背景色。根据下面的照片。

Excel

完整的Python脚本

import openpyxl
from PIL import Image

def image_to_excel(file, output, percentage):

    # Open picture and create a workbook instance
    im = Image.open(file)
    wb = openpyxl.Workbook()
    sheet = wb.active

    # Resize image with spreadsheet's columns
    width, height = im.size
    cols = width * percentage/100
    print('Old image size: ' + str(im.size))
    imgScale = cols/width
    newSize = (int(width*imgScale), int(height*imgScale))
    im = im.resize(newSize)

    # Get new picture's dimensions
    cols, rows = im.size
    print('New image size: ' + str(im.size))

    # Spreadsheet's cell: height = 6 and width = 1
    for i in range(1, rows):
        sheet.row_dimensions[i].height = 0.6
    for j in range(1, cols):
        column_letter = openpyxl.utils.get_column_letter(j)
        sheet.column_dimensions[column_letter].width = 0.0625

    # Convert image to RGB
    rgb_im = im.convert('RGB')

    # Formatting cell's color 
    for i in range(1, rows):
        for j in range(1, cols):
            c = rgb_im.getpixel((j, i))
            rgb2hex = lambda r,g,b: f"ff{r:02x}{g:02x}{b:02x}"
            c = rgb2hex(*c)
            sheet.cell(row = i, column = j).value = " "
            customFill = openpyxl.styles.PatternFill(start_color=c, end_color=c, fill_type='solid')
            sheet.cell(row = i, column = j).fill = customFill

    # Save workbook
    #im.close()
    #rgb_im.close()
    wb.save(output) 
    wb.close()


# Export
image_to_excel('jangada.jpg', 'final.xlsx', 100)

问题是当我试图改变图像,像这样的。https:/www.planetware.comwpimages201909croatia-in-pictures-most-beautiful-places-to-visit-plitvice-lakes.jpg 运行代码后,我得到了错误。

Error

翻译是这样的。

Excel能够打开teh文件 通过修复或删除不可读的内容。

从xlstyles.xml部分删除了记录。从xlstyles.xml部分(样式)删除了样式。

修复的记录。关于xlworksheetssheet1.xml单元格部分的信息。

我使用excel 2013。有谁知道如何解决这个问题?

python excel xml openpyxl
1个回答
1
投票

你的 rgb2hex 没有按照您的意图工作,请删除 ff 我想这就是破坏你代码的原因。

你的func:

>>>rgb2hex = lambda r,g,b: f"ff{r:02x}{g:02x}{b:02x}"
>>>rgb2hex(120,120,120)
ff787878

输出应该是 787878.

>>>rgb2hex = lambda r,g,b: f"{r:02x}{g:02x}{b:02x}"
>>>rgb2hex(120,120,120)
787878
© www.soinside.com 2019 - 2024. All rights reserved.