首页 > 编程语言 >python将图片写入excel

python将图片写入excel

时间:2023-12-08 09:04:03浏览次数:27  
标签:img python excel 写入 column ws max row



import json
import pandas as pd
from openpyxl import Workbook
from openpyxl.drawing.image import Image
excel_col_map={
1:"A",
2:"B",
3:"C",
4:"D",
5:"E",
6:"F",
7:"G"
}
def jsonfile_img2excel(json_file,img_field,excel_file):
'''
将json文件中的图片地址,写入到excel表格中
'''
data = pd.read_json(json_file, lines=True)
columns=list(data.columns) # 获取表头 ['name', 'img_path', 'age']
wb = Workbook()
ws = wb.active
# img_col_index = columns.index("img_path")+1
img_col_index = columns.index(img_field)+1
print(f"img_col_index={img_col_index}")# 图片在第几列 -》 2
column_letter= excel_col_map.get(img_col_index) # 第几列 2-》B
ws.append(columns) # excel加入表头

for _, row in data.iterrows():
print(list(row)) # ['deng', 'D:\\code\\yingdao_2\\excel\\1.jpg', 23]
ws.append(list(row))
img = Image(row['img_path'])
img.width = 40
img.height = 40
# column_letter = 'C'
ws.column_dimensions[column_letter].width = img.width
print(f"max_row={ws.max_row},max_column={ws.max_column}")
cell = ws.cell(row=ws.max_row, column=img_col_index)
cell.value = None
ws.add_image(img, f'{column_letter}{ws.max_row}')
ws.row_dimensions[ws.max_row].height = 40
wb.save(excel_file)


def img2excel(excel_path,headers,data_list,img_field,img_width=40,img_height=40):
'''
excel_path : 保存的excel文件路径
headers : 表头
data_list : 二维数据列表
img_field: 表头中图片路径的字段名
img_width: 图片宽
img_height: 图片高
'''
wb = Workbook()
ws = wb.active
# 1.添加表头
ws.append(headers) # 获取表头 ['name', 'img_path', 'age']
# 2. 图片路径字段名 img_field='img_path' ,图片存哪列
img_col_index = headers.index(img_field) + 1
# 3. 获取图片所在列的名称 ,比如第2列--》 B列
img_column_letter = excel_col_map.get(img_col_index) # 第几列 2-》B
# 4.将数据写入excel
for data in data_list:
# data 表示一行数据 => ['deng', 'D:\\code\\yingdao_2\\excel\\1.jpg', 23]
ws.append(data)
# 获取图片
img = Image(data.get(img_field))
# 设置图片大小
img.width = img_width
img.height = img_height
# 图片所在列的宽度
ws.column_dimensions[img_column_letter].width = img_width
# 图片所在行的高度
ws.row_dimensions[ws.max_row].height = img_height
print(f"max_row={ws.max_row},max_column={ws.max_column}")
# 定位到图片需要存放的单元格
cell = ws.cell(row=ws.max_row, column=img_col_index)
cell.value = None
ws.add_image(img, f'{img_column_letter}{ws.max_row}')
wb.save(excel_path)

if __name__ == '__main__':
dic={"name":"deng","img_path":r"D:\code\yingdao_2\excel\1.jpg","age":23}
f = open("1.json",'w',encoding="utf-8")
f.write(json.dumps(dic,ensure_ascii=False)+"\n")
f.write(json.dumps(dic,ensure_ascii=False)+"\n")
f.write(json.dumps(dic,ensure_ascii=False)+"\n")
f.flush()
f.close()
json_file="1.json"
excel_file="1.xlsx"
img2excel(json_file,excel_file)
 

 

标签:img,python,excel,写入,column,ws,max,row
From: https://www.cnblogs.com/knighterrant/p/17884396.html

相关文章

  • python学习笔记-tornado框架
    一、简单介绍tornadotornado学习概要1、基本操作 -路由系统 -视图函数2、自定义开源组件 session Form表单验证3、自定义异步非阻塞web框架1、简单示例importtornado.ioloopimporttornado.webclassMainHandle(tornado.web.RequestHandler):defget(self):......
  • Python 深拷贝和浅拷贝详解
    import logging 一、深拷贝和浅拷贝概念理解1、浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。2、深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和......
  • 聪明办法学python-12.4——12.8笔记打卡
     python中Debug的方法  必要性:在于程序可能出现不符合预期结果的情况 困难:在于bug的出触发原因多种多样,只能看到最终结果 调试代码的基本思路:让bug在设计时更容易暴露出来,包括利用print和断言来解决简单问题,利用IDE进行调试 常见的错误:函数未定义会报错,需要检查函数......
  • Python的hashlib模块
    一、什么是摘要算法1、摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)用于生成数据或文本的简短摘要或哈希值的算法。它们被广泛应用于密码学、数据完整性验证和信息检索等领域。摘要算法通过对输入数据进......
  • debug-聪明办法学Python
    如何Debug调试理论开始调试之前通过不断地调试,比如在循环中打印某个元素检查不得不承认机器永远只认编程语言不过你必须要时刻关注你的变量名称是否发生变更,这在大改前必须要注意的调试已知程序有bug,如何找到?调试困难的根本原因因为bug的触发经历了漫长的过程需求->设......
  • Python之的sys、os、subprocess、shutil 模块
    一、sys模块 sys模块是与python解释器交互的一个接口1、sys.argv() 在Python中,sys.argv是一个列表,它包含了命令行参数传递给Python脚本的参数值。sys.argv列表的第一个元素是脚本的名称,后面的元素是传递给脚本的参数。importsys#打印脚本名称print("脚本名称:",s......
  • python第五次学习笔记
    1.调试: 调试(debugging)是暂停正在运行的程序,并解决程序中出现的问题的过程。调试Python程序非常简单,Python调试器会设置条件断点,并一次执行一行代码。接下来我们将使用Python标准库中的pdb模块调试Python程序。2.调试技术: 我们可以使用多种方法调试Python程序,以下是调试......
  • Python的json序列化模块
    一、jsonJson模块提供了四个功能:dumps、dump、loads、load1、前景什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。序列化的目的以某种存储形式使自定义对象持久化;将对象从一个地方传递到另一个地方。使程序更具维护性在Python中,能够......
  • python的异步迭代器含义
    python的异步迭代器什么意思?什么是迭代器:迭代器是一种遵循迭代器协议的对象,可以被用在像for循环这样的迭代环境中。迭代器协议包含两个方法:__iter__():返回迭代器自身。__next__():返回迭代器的下一个元素。如果没有更多元素,则抛出StopIteration异常。就是这两个方法要包......
  • python-文件IO操作实例
    一、如何复制文件1、使用shutil模块来复制importshutil#导入shutil模块#定义源文件和目的文件的路径#图片src_path="E:/python/py/基础篇/01_基础/06_文件操作/图片.jpg"dst_path="D:/图片.jpg"#文本src1_path="E:/python/py/基础篇/01_基础/06_文件操作/......