python 取 excel 中的图片(一个格子中有多张图片) 怎么实现?

我正在用 python 做一个小的应用
取 excel 中的图片,并按照规则重命名
现在遇到了个问题,excel 中一个格子里有多张图片,但是我现在只能取到格子中的最后一张,请问怎么解决??


```python
from openpyxl import load_workbook
import random
from openpyxl_image_loader import SheetImageLoader

path = r'/Users/songbaobaoking/Desktop/test/'

saveDir = "pics/"
wb = load_workbook(path + '111.xlsx')

ws = wb[ '总']
image_loader = SheetImageLoader(ws)

num = ws.max_row

for i in range(2,2+1):
    name = ws[ 'C'+str(i)].value
    image = image_loader.get( 'G'+str(i))
    rand = random.randint(1,100)
    image.save(path + saveDir  + name + str(rand) + ".png")




![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/900493762296169.png "#left")

如果你使用 Python 处理 Excel 并提取单元格中的多张图片,可以使用 openpyxl 库来解决这个问题。openpyxl 是一个常用的处理 Excel 文件的库。

以下是一个示例代码,展示如何使用 openpyxl 库提取单元格中的多张图片:

from openpyxl import load_workbook

def extract_images_from_cell(filename, sheet_name, cell_address):
    # 加载 Excel 文件
    wb = load_workbook(filename)
    
    # 选择指定的工作表
    ws = wb[sheet_name]
    
    # 获取指定单元格
    cell = ws[cell_address]
    
    # 获取单元格中的所有图片
    images = cell._hyperlink.relationships
    
    # 遍历每张图片并进行重命名
    for i, image in enumerate(images):
        image_data = image.target_part.blob
        
        # 保存图片为文件
        with open(f"image_{i+1}.jpg", "wb") as f:
            f.write(image_data)

# 示例用法
extract_images_from_cell("example.xlsx", "Sheet1", "A1")

在上面的代码中,我们首先使用 load_workbook 函数加载 Excel 文件。然后,选择指定的工作表,并获取指定的单元格。

通过访问单元格对象的 _hyperlink.relationships 属性,我们可以获取到该单元格中的所有图片。接下来,我们遍历每张图片,并将其保存为文件。在这个示例中,图片以 image_1.jpgimage_2.jpg 等命名。

你可以根据实际的需求修改代码,调整保存图片的路径、文件名以及处理多个单元格等情况。记得在使用之前确保已经安装了 openpyxl 库。

【以下回答由 GPT 生成】

我可以使用openpyxl库来解析Excel文件,并使用PIL库来处理图片。以下是解决该问题的步骤:

  1. 导入所需的库:
from openpyxl import load_workbook
from PIL import Image
  1. 加载Excel文件:
wb = load_workbook('your_excel_file.xlsx')
ws = wb['Sheet1']  # 根据实际情况选择工作表
  1. 获取单元格中的所有图像:
image_list = []
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=7, max_col=7):
    for cell in row:
        image = cell.value
        if image:
            image_list.append(image)
  1. 保存图像:
for i, image in enumerate(image_list):
    image.save(f'your_output_directory/image_{i+1}.png')

完整代码如下:

from openpyxl import load_workbook
from PIL import Image

wb = load_workbook('your_excel_file.xlsx')
ws = wb['Sheet1']  # 根据实际情况选择工作表

image_list = []
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=7, max_col=7):
    for cell in row:
        image = cell.value
        if image:
            image_list.append(image)

for i, image in enumerate(image_list):
    image.save(f'your_output_directory/image_{i+1}.png')

请注意,上述代码仅适用于单个单元格中包含的多张图像。如果要处理多个单元格,您需要做一些额外的工作。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^