首页 > 其他分享 >【办公类-】材料报销批量插入图片

【办公类-】材料报销批量插入图片

时间:2024-10-21 22:21:47浏览次数:3  
标签:img 批量 image 报销 插入 workbook path row 图片

背景需求:

我们班分到美工室,需要准备大量材料,根据原始的报销单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步,如果一个格子有多张图片,把第二张图片编号放到最后,

把列宽拉大

最终效果

后续再用星火讯飞寻找用Python就能等比例缩小图片并且不损害质量的代码

标签:img,批量,image,报销,插入,workbook,path,row,图片
From: https://blog.csdn.net/reasonsummer/article/details/143102826

相关文章

  • Mongodb(4)索引,查看执行计划,聚合操作aggregate,表关联查询,批量插入测试数据,执行计
    创建索引,支持:单键索引、复合索引,唯一索引创建索引后台执行db.books.createIndex({open:1,close:1},{background:true})对内嵌文档字段创建索引:db.books.createIndex({"author.name":1})创建唯一索引db.books.createIndex({title:1},{unique:true})在包含嵌套对象的......
  • Python 在Excel中插入、替换、提取、或删除图片
    Excel是主要用于处理表格和数据的工具,我们也能在其中插入、编辑或管理图片,为工作表增添视觉效果,提升报告的吸引力。本文将详细介绍如何使用Python操作Excel中的图片,包含以下4个基础示例:Python在Excel中插入图片Python替换Excel中的图片Python提取Excel中的图片Python删除......
  • mongodb 查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操
    mongodb查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操作符,更新单个/多个文档,删除文档,批量插入,$type操作符,内嵌文档和数组查找修改1.条件查询SQLMQLa=1{a:1}a<>1{a:{$ne:1}}a>1{a:{$gt:1}}a>=1{a:{$gte:1}}a<1{a:{$lt......
  • 批量修改文件夹内各种格式文件名(与文件夹名保持一致)——EXCEL VBA 实现
     如下图:加入我们有3个文件夹,需要将3个文件夹内所有文件名改为与所在文件夹名一致,可用excelvba实现。方法如下: 一、打开此xlsm文件打开excel,  alt+F11快捷键打开代码编辑窗口。二、将文件夹路径修改为你的文件夹路径,如下图:需要重命名的文件夹全部放入一个总文件......
  • 轻松原创!短剧,带货视频AI自动批量混剪工具!
    今天再分享这个批量剪辑神器,非常适合短剧和带货短视频的制作,轻松过原创,提供了从视频分割、合成、混剪到格式转换的多项功能。以下是它的主要功能:视频分割与提取按时长或段数分割按镜头转场变化分割按语音内容自动分割提取无声视频或音频视频合成自动合成文......
  • 轻松原创!短剧,带货视频AI自动批量混剪工具!
    今天再分享这个批量剪辑神器,非常适合短剧和带货短视频的制作,轻松过原创,提供了从视频分割、合成、混剪到格式转换的多项功能。以下是它的主要功能:视频分割与提取按时长或段数分割按镜头转场变化分割按语音内容自动分割提取无声视频或音频视频合成自动合成文......
  • TypeORM批量插入
    在TypeORM中,批量插入数据可以通过多种方法实现,包括 save、insert 和 createQueryBuilder。这些方法各有优缺点,适用于不同的场景。使用createQueryBuilder进行批量插入createQueryBuilder 是性能最优的批量插入方法。以下是一个示例:awaitdataSource.createQ......
  • USB协议详解第15讲(USB传输-批量传输及事务组成)
    1.前言前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,上一节我们讲了同步传输细节及事务组成,今天我们主要讲解批量传输及事务组成,批量传输也叫大容量传输。批量传输和同步传输类似,是使用批量事务(BulkTrans......
  • 短剧批量转存工具,超级省时省力,短剧好帮手
    搜索时得到一个短剧资源库,面对万部的短剧,一个个保存太麻烦每天下班保存一百多部,三天就不行了,手酸指头疼,本着互联网有无限可能,发现真有网盘批量转存工具,正好网盘开了会员,不怕网盘爆了。今天介绍两款夸克转存工具和一个百度转存工具短剧猫批量转存工具先是找到夸克cookies......
  • ton 合约map批量同步和go调用
    tact代码:import"@stdlib/deploy";import"@stdlib/ownable";structRoundInfo{orders:map<Intasuint32,BuyInfo>;sum:Intasuint16;arrLength:Intasuint16;}structBuyInfo{startLuckyNum......