背景需求:
我们班分到美工室,需要准备大量材料,根据原始的报销单EXCLE,里面有商品名称、图片、链接、单位、数量等信息
今天我和搭档一起填写新表,发现手机截图的图片插入EXCEL后非常大,
需要手动调整图片大小,每一项都要这么插入调整,非常费劲。
因此,我将每张截图单独放在图片文件夹里。
只是先把EXCEL的文字做好
代码份两部分:
1、把EXCEL里面的行高调整到300
2、把原图插入指定的位置(与单元格左上角的坐标相同)
代码展示
'''
美工室材料报销EXCEL插入图片
星火讯飞、阿夏
20241021
'''
import os,time
from openpyxl import Workbook, load_workbook
from openpyxl.drawing.image import Image
from PIL import Image as PILImage
# 定义文件夹路径和图片大小(以像素为单位)
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\报销清单'
folder_path = path + r'\01图片'
file_path = path + r'\20241020美工室打造 - 副本.xlsx'
# 加载现有的Excel工作簿
workbook = load_workbook(filename=file_path)
sheet = workbook.active
# 设置新的行高
new_row_height = 300 # 可以根据需要调整行高
# 遍历从第4行开始的所有行并设置行高
for row in range(3, sheet.max_row + 1):
sheet.row_dimensions[row].height = new_row_height
# 保存修改后的工作簿
workbook.save(file_path)
# 图片大小参数(以厘米为单位)
image_width_cm = 5
image_height_cm = 10
dpi = 96 # 对于打印,可以使用较高的DPI
image_width_px = int(image_width_cm * dpi / 2.54)
image_height_px = int(image_height_cm * dpi / 2.54)
# 获取文件夹中的所有图片文件
image_files = [f for f in os.listdir(folder_path) if f.endswith(('png', 'jpg', 'jpeg', 'bmp', 'gif'))]
# 创建一个新的Excel工作簿或加载现有的工作簿
try:
workbook = load_workbook(file_path)
except FileNotFoundError:
workbook = Workbook()
sheet = workbook.active
# 插入图片到指定的单元格
for i, image_file in enumerate(image_files):
img_path = os.path.join(folder_path, image_file)
img = PILImage.open(img_path)
img = img.resize((image_width_px, image_height_px), PILImage.LANCZOS) # 使用高质量的缩放算法调整图片大小
img = Image(img_path)
cell = sheet.cell(row=i + 3, column=2) # B列从第3行开始
sheet.add_image(img, cell.coordinate)
# 保存工作簿
workbook.save(path + r'\20241020美工室打造 - 副本2.xlsx')
time.sleep(2)
终端运行
必须插入原图282KB,等会儿缩小的只是长宽,如果想把图片放大,还能显示清晰的内容。
测试多次也没有找到可以批量缩小图片长宽,保留质量的代码,因此只能手动修改
第1步,全选文字、图片
第2步,图片格式等比例,缩小到14%
每张插入的图片都在B单元格范围内
第3步,如果一个格子有多张图片,把第二张图片编号放到最后,
把列宽拉大
最终效果