我正在用 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")

如果你使用 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.jpg
、image_2.jpg
等命名。
你可以根据实际的需求修改代码,调整保存图片的路径、文件名以及处理多个单元格等情况。记得在使用之前确保已经安装了 openpyxl
库。
【以下回答由 GPT 生成】
我可以使用openpyxl
库来解析Excel文件,并使用PIL
库来处理图片。以下是解决该问题的步骤:
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')
完整代码如下:
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')
请注意,上述代码仅适用于单个单元格中包含的多张图像。如果要处理多个单元格,您需要做一些额外的工作。
【相关推荐】