Python向Excel中插入图片的简单实现方法

  • Post category:Python

请看下面的详细讲解:

一、需要用到的Python库

  1. openpyxl:用于操作 Excel 文件的第三方库,可以实现 Excel 文件的读取、修改和生成等多种功能;
  2. Pillow:用于图像处理的第三方库,可以实现加载、保存和处理图像等多种功能。

二、程序实现步骤

  1. 读取 Excel 文件并获取需要插入图片的单元格位置;
  2. 加载图片并处理尺寸;
  3. 在指定单元格位置插入图片;
  4. 保存 Excel 文件。

下面是两个示例说明。

示例一

在第一个单元格中插入一张图片。

import openpyxl
from openpyxl.drawing.image import Image
from PIL import Image as PIL_Image

# 1. 读取 Excel 文件
wb = openpyxl.load_workbook('example.xlsx')
ws = wb.active

# 2. 加载图片并处理尺寸
img = PIL_Image.open('picture.jpg')
img_width, img_height = img.size
if img_width > 80:
    img_width = 80
if img_height > 60:
    img_height = 60
img = img.resize((img_width, img_height))

# 3. 在指定单元格位置插入图片
img_obj = Image('picture.jpg')
cell = ws.cell(row=1, column=1)
cell.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')
ws.add_image(img_obj, f'{cell.column_letter}{cell.row}:Z{cell.row+20}')

# 4. 保存 Excel 文件并输出结果
wb.save('example.xlsx')
print('插入图片成功!')

说明:

  • openpyxl.styles.Alignment 用于设置单元格的文本对齐方式。
  • 'picture.jpg' 指待插入的图片的路径。
  • f'{cell.column_letter}{cell.row}:Z{cell.row+20}' 指图片所占据的单元格范围。

示例二

在单元格位置中插入一张图片,然后对 Excel 文件进行格式化。

import openpyxl
from openpyxl.styles.colors import Color
from openpyxl.styles.fills import PatternFill
from openpyxl.styles import Border, Side
from openpyxl.drawing.image import Image
from PIL import Image as PIL_Image

# 1. 读取 Excel 文件
wb = openpyxl.load_workbook('example.xlsx')
ws = wb.active

# 2. 加载图片并处理尺寸
img = PIL_Image.open('picture.jpg')
img_width, img_height = img.size
if img_width > 80:
    img_width = 80
if img_height > 60:
    img_height = 60
img = img.resize((img_width, img_height))

# 3. 在指定单元格位置插入图片
img_obj = Image('picture.jpg')
cell = ws.cell(row=5, column=2)
cell.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')
ws.add_image(img_obj, f'{cell.column_letter}{cell.row}:Z{cell.row+20}')

# 4. 设置单元格样式
fill = PatternFill(patternType='solid', fgColor=Color('FFC000'))
cell.fill = fill
cell.border = Border(left=Side(style='thick'), right=Side(style='thick'), top=Side(style='thick'), bottom=Side(style='thick'))

# 5. 保存 Excel 文件并输出结果
wb.save('example.xlsx')
print('插入图片成功!')

说明:

  • openpyxl.styles.PatternFill 用于设置单元格填充色。
  • openpyxl.styles.Border 用于设置单元格边框。
  • Color('FFC000') 指单元格填充色的十六进制表示。
  • left=Side(style='thick') 指在左侧设置粗边框。