请看下面的详细讲解:
一、需要用到的Python库
openpyxl
:用于操作 Excel 文件的第三方库,可以实现 Excel 文件的读取、修改和生成等多种功能;Pillow
:用于图像处理的第三方库,可以实现加载、保存和处理图像等多种功能。
二、程序实现步骤
- 读取 Excel 文件并获取需要插入图片的单元格位置;
- 加载图片并处理尺寸;
- 在指定单元格位置插入图片;
- 保存 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')
指在左侧设置粗边框。