python 图片插入excel

python 复制代码
from openpyxl import Workbook, load_workbook
from openpyxl.drawing.image import Image
from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, TwoCellAnchor
import numpy as np
import os
from openpyxl.styles import Alignment

def GetImgNameByEveryDir(file_dir,videoProperty):
    FileNameWithPath = []
    FileName = []
    FileDir = []
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] in videoProperty:
                FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径
                FileName.append(file)                              # 保存图片名称
                FileDir.append(root + '/')            # 保存图片所在文件夹
    return np.array(FileName), np.array(FileNameWithPath),FileDir

## 循环便利文件
class Generate(object):
    def __init__(self,xls_save_path,file_dir=None):
        self.file_name = xls_save_path
        self.file_dir  = file_dir
        pass
    def save_one_dir_imgs_to_excel(self):
        if os.path.exists(self.file_name)==False:
            wb = Workbook()# 使用openpyxl创建新的workbook
        else:
            wb = load_workbook(filename=self.file_name)

        try:
            ws = wb['Sheet']
            wb.remove(ws)  # 删掉默认的sheet
        except:
            print('默认sheet不存在,不用删除...')
        ws = wb.active
        ff,pp,dd = GetImgNameByEveryDir(self.file_dir,['.jpg'])
        ws = wb.create_sheet('仪表结果')# 根据文件夹名称创建sheet
        alignment_center = Alignment(horizontal='center', vertical='center')
        ws.cell(row=1, column=1, value='结果图片').alignment = alignment_center# 设置第一行的字段
        ws.cell(row=1, column=2, value='图片名称').alignment = alignment_center
        ws.cell(row=1, column=3, value='仪表读数').alignment = alignment_center
        ws.cell(row=1, column=4, value='错误类型').alignment = alignment_center
        
        for kk in range(len(pp)):
            ws.row_dimensions[kk+2].height   = 150
            ws.column_dimensions["A"].width  = 30
            ws.column_dimensions["B"].width  = 60
            ws.column_dimensions["C"].width  = 10
            ws.column_dimensions["D"].width  = 10
            ws.cell(row=kk+2, column=3, value='222222').alignment = alignment_center   # 后面的.alignment是单元格内容居中
            ws.cell(row=kk+2, column=2, value=pp[kk]).alignment   = alignment_center


            img   = Image(pp[kk])# 创建openpyxl的Image对象
            _from = AnchorMarker(0, 50000, kk+1, 50000)# 创建锚标记对象,设置图片所占的row
            to    = AnchorMarker(1, -50000, kk+1+1, -50000)# 创建锚标记对象,设置图片所占的row 从而确认了图片位置
            img.anchor = TwoCellAnchor('twoCell', _from, to)# 将锚标记对象设置图片对象的锚属性,图形就具备了所在位置
            ws.add_image(img)# 添加图片
            


        # print(allfiles)
        wb.save(self.file_name)

    def save_one_result_to_excel(self,resultImgPath,resultMeter,meterErrorType,dir1,dir2):
        if os.path.exists(self.file_name)==False:
            wb = Workbook()# 使用openpyxl创建新的workbook
        else:
            wb = load_workbook(filename=self.file_name)

        try:
            ws = wb['Sheet']
            wb.remove(ws)  # 删掉默认的sheet
        except:
            print('默认sheet不存在,不用删除...')

        sheet_names      = wb.sheetnames
        print('ws sheet  = ',sheet_names)
        ws               = wb.active
        if '仪表结果' not in sheet_names:
            ws           = wb.create_sheet('仪表结果')# 根据文件夹名称创建sheet
        alignment_center = Alignment(horizontal='center', vertical='center')
        rows             = ws.max_row
        columns          = ws.max_column
        resultImgPath2   = resultImgPath.replace('\\', '/')
        imgName          = resultImgPath2.split('/')[-1] # linux用这个

        print('rows = ',rows)
        ws.cell(row = 1, column = 1, value = '结果图片').alignment = alignment_center# 设置第一行的字段
        ws.cell(row = 1, column = 2, value = '图片名称').alignment = alignment_center
        ws.cell(row = 1, column = 3, value = '仪表读数').alignment = alignment_center
        ws.cell(row = 1, column = 4, value = '错误类型').alignment = alignment_center
        
        ws.row_dimensions[rows+1].height = 150
        ws.column_dimensions["A"].width  = 30
        ws.column_dimensions["B"].width  = 10
        ws.column_dimensions["C"].width  = 30
        ws.column_dimensions["D"].width  = 10
        # ws.cell(row = rows + 1, column = 3, value = resultMeter).alignment    = alignment_center   # 后面的.alignment是单元格内容居中
        ws.cell(row = rows + 1, column = 2, value = '').alignment        = alignment_center
        # ws.cell(row = rows + 1, column = 4, value = meterErrorType).alignment = alignment_center
        # ws.cell(row = rows + 1, column = 5, value = meterErrorType).alignment = alignment_center

        try:
            resultImgPath1 = dir1 + '/' + imgName
            img        = Image(resultImgPath1)# 创建openpyxl的Image对象
            _from      = AnchorMarker(0,  50000, rows+0,  50000)# 创建锚标记对象,设置图片所占的row
            to         = AnchorMarker(1, -50000, rows+1, -50000)# 创建锚标记对象,设置图片所占的row 从而确认了图片位置
            img.anchor = TwoCellAnchor('twoCell', _from, to)# 将锚标记对象设置图片对象的锚属性,图形就具备了所在位置
            ws.add_image(img)# 添加图片

            resultImgPath2 = dir2 + '/' + imgName
            img2        = Image(resultImgPath2)# 创建openpyxl的Image对象
            _from2      = AnchorMarker(2,  50000, rows+0,  50000)# 创建锚标记对象,设置图片所占的row
            to2         = AnchorMarker(3, -50000, rows+1, -50000)# 创建锚标记对象,设置图片所占的row 从而确认了图片位置
            img2.anchor = TwoCellAnchor('twoCell', _from2, to2)# 将锚标记对象设置图片对象的锚属性,图形就具备了所在位置
            ws.add_image(img2)# 添加图片
        except:
            print('')


        
        wb.save(self.file_name)

def GetImgNameByEveryDir(file_dir,videoProperty):
    FileNameWithPath = []
    FileName = []
    FileDir = []
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] in videoProperty:
                FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径
                FileName.append(file)                              # 保存图片名称
                FileDir.append(root + '/')            # 保存图片所在文件夹
    return np.array(FileName), np.array(FileNameWithPath),FileDir

dir_need1 = '图1文件夹/'       # 原图文件夹
dir_need2 = '图2文件夹/'   # 结果图文件夹
ge=Generate('保存图片到excel.xlsx',dir_need1)
ff,pp,dd = GetImgNameByEveryDir(dir_need1,['.jpg'])
for k in range(len(ff)):
    ge.save_one_result_to_excel(pp[k],'1234','1235',dir_need1,dir_need2)

插入展示如下:

相关推荐
richard_first14 小时前
Transformer 与大语言模型:第10章 Residual (残差连接)
人工智能·深度学习·机器学习·transformer
denggun1234514 小时前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
zhongerzixunshi14 小时前
深耕绿色建材认证 赋能建筑行业低碳高质量发展
人工智能
Wang's Blog14 小时前
Vibe Coding一人即团队系列10: 在 Claude 与 Codex 中接入 DeepSeek 模型
人工智能
lisw0514 小时前
计算与科学哲学(Philosophy of Computing and Science)
java·开发语言·人工智能
天天进步201514 小时前
Pixelle-Video 源码解析 #10:多模型适配:GPT、通义千问、DeepSeek、Ollama 如何统一调用?
人工智能·gpt
@atweiwei14 小时前
用 Rust 构建 Agent 应用的高性能框架:langchainrust 架构全景
人工智能·架构·rust·langchain·llm·agent·ai编程
欧特克_Glodon14 小时前
OpenCV计算机视觉开发入门与实践<二十二>:图像平滑之线性滤波
c++·人工智能·opencv·计算机视觉
起光14 小时前
Python类与对象(一)
python
ShiXZ21314 小时前
ChatGPT Plus用户注意:5小时限制今日恢复,额度每5小时自动刷新(且额度又又又重置了)
人工智能·chatgpt