【tkGo】将Excel里的图片链接替换为图片(Excel嵌入图片)
1 背景
因为某些原因,我们的Excel里会放入一些图片链接,但查看的时候需要一个个点开,通过浏览器显示,非常麻烦。
我们可以通过python的openpyxl这个库来解决此问题,一键替换所有链接为图片。
2 环境
Python 3.7.3 64-bit
openpyxl 3.0.0 (用于操作Excel)
requests 2.22.0 (用于下载图片)
validators 0.14.1 (用于校验文本是否是链接)
3 openpyxl
wb = openpyxl.load_workbook(path) # 加载Excel文件sheet_names = wb.sheetnames # 获取Excel的sheet列表sheet = wb[sheet_name] # 指定sheetrow_num = sheet.max_row # 获取sheet行数
column_num = sheet.max_column # 获取sheet列数for row in sheet.rows: # 遍历sheet所有行
for column in sheet.columns: # 遍历sheet所有列for row in sheet.rows: # 遍历sheet数据单元格for cell in row:cell_value = cell.value # 单元格值cell_row = cell.row # 单元格所在行索引cell_column = cell.column # 单元格所在列索引cell_column_letter = openpyxl.utils.get_column_letter(cell.column) # 单元格所在列名称cell_coordinate = cell.coordinate # 单元格坐标sheet.row_dimensions[cell_row].height = IMG_CELL_HEIGHT # 设置行高
sheet.column_dimensions[cell_column_letter].width = IMG_CELL_WIDTH # 设置列宽img = openpyxl.drawing.image.Image(img_path)
sheet.add_image(img, cell_coordinate) # 往Excel里嵌入图片wb.save(filename=path_excel_with_img) # 保存Excel
4 主要代码
def is_img_url(self, value: str):"""检测单元格值是否是图片链接"""if value.startswith("=HYPERLINK"): value = value[12:-2] # 去掉excel超链接函数is_img_url = Falseif validators.url(value): # 判断是否是urlfor img_ext in self.img_ext:if value.lower().endswith(img_ext): # 判断是否是图片文件后缀名is_img_url = Truebreakreturn is_img_url, value
def download_img(self, img_url, sheet_name=None, coordinate=None, timeout=15):"""图片下载:param img_url: 图片链接:param sheet_name: ExcelSheet名称:param coordinate: Excel单元格坐标:param timeout: 图片下载超时时间"""img_path = self.img_url_to_path(img_url) # 图片保存地址if os.path.exists(img_path): # 判断图片是否已经存在self.stdout(sheet_name, coordinate, img_url, self.IMG_DOWNLOAD_EXISTS)else:self.check_and_mkdir(path=img_path) # 判断保存图片的文件夹是否存在,不存在则创建r = requests.get(img_url, timeout=timeout) # 发起HTTP请求if not r.content[:4] == b'\xff\xd8\xff\xe0': # 判断返回内容是否是图片格式self.stdout(sheet_name, coordinate, img_url, self.IMG_DOWNLOAD_ERROR, self.IMG_URL_ERROR)return Falsewith open(img_path, "wb") as f: # 保存图片至本地f.write(r.content)self.stdout(sheet_name, coordinate, img_url, self.IMG_DOWNLOAD_DONE)return True
def add_img_of_sheet(self, sheet_name):"""Excel中添加图片:param sheet_name: Sheet名称"""sheet = self.wb[sheet_name] # 指定Sheetfor row in sheet.rows: # 遍历所有行for cell in row: # 遍历单元格cell_value = str(cell.value) # 单元格值is_img_url, img_url = self.is_img_url(cell_value)if is_img_url: # 如果单元格存放的是图片链接img_path = self.img_url_to_path(img_url) # 获取图片本地保存地址if os.path.exists(img_path): # 判断本地图片是否存在try:img = openpyxl.drawing.image.Image(img_path) # 加载图片img.height = self.IMG_HEIGHT # 设置图片高度img.width = self.IMG_WIDTH # 设置图片宽度sheet.add_image(img, cell.coordinate) # 嵌入图片sheet.row_dimensions[cell.row].height = self.IMG_CELL_HEIGHT # 设置行高column_letter = openpyxl.utils.get_column_letter(cell.column) # 获取列名sheet.column_dimensions[column_letter].width = self.IMG_CELL_WIDTH # 设置列宽cell.alignment = openpyxl.styles.Alignment(wrapText=True) # 设置单元格属性 - 自动换行except Exception as e:print_exc() # 打印详细错误self.img_add_failed[img_url] = (sheet_name + " " + cell.coordinate, str(e)) # 记录错误信息self.stdout(sheet_name, cell.coordinate, img_url, str(e))else:self.img_add_failed[img_url] = (sheet_name + " " + cell.coordinate, self.IMG_DOWNLOAD_NOT_EXISTS)self.stdout(sheet_name, cell.coordinate, img_url, self.IMG_DOWNLOAD_NOT_EXISTS)
5 最终效果
点击Trans菜单下的IMG to Excel选项,一键将Excel中的图片链接转化为图片,首先需要复制Excel文件,否则会报如下错误:
正常效果:
6 源码地址
项目代码在github上:https://github.com/TheUncleWhoGrowsBeans/tkGo
【tkGo】将Excel里的图片链接替换为图片(Excel嵌入图片)相关推荐
- excel根据条件列转行_如何将excel里的一列数据转为一行 excel数据列转行的办法步骤...
如何将excel里的一列数据转为一行 excel数据列转行的办法步骤 我们的生活中越来越离不开PC,但在使用PC的过程中总会遇到各种各样的问题.知识屋致力于给PC小白朋友们介绍一些简单常用问题的解决办 ...
- Typora等markdown笔记软件图片链接失效的问题解决办法,图片的相对路径、绝对路径的设置,图片上传到图床的方法
文章目录 -遇到的问题:Typora编辑MD文档,图片失效的问题解决 -解决的方法: 方法一:本地图片,使用相对路径,并将图片放在和md文件的同一目录下 步骤1.Typora的图片根目录设置 步骤2. ...
- 把Excel里的url链接转换为图片显示
先看我们原始数据 这里的图片是http链接,怎么把链接转成图片呢,我们接着往下看吧 我们把链接复制到新的execl表格里面 我们修改下表格的单元格行高和行宽,这里有个技巧,我们点击下表格的左上角的三角 ...
- java excel 搜索_Java 查找、替换并高亮Excel数据
需求介绍 我有一个含有大量数据资料的Excel文档,现需要对其中的一个或多个单元格的数据进行修改.请问如何才能用Java代码快速查找到指定数据,然后用新文本将其替换并高亮?例如,在下图所示的Excel ...
- excel根据颜色赋值 Excel填充颜色单元格替换成数字 excel把所有红色变成1
法/步骤 案例中,周一到周五产生倒班的,是用橙色标识的.周六周日的倒班是用蓝色标识的.然后,我们要将橙色的单元格替换成数字30,蓝色的单元格替换成数字50,分别代表30元和50元的倒班费. 使用快捷键 ...
- .net aspose.words 域加载图片_使用Python批量替换csdn文章的图片链接
欢迎大家关注我的微信公众号"IT工匠"获取更多资源(涉及算法.数据结构.java.深度学习.计算机网络.python.Android等互联网技术资料). 前言 笔者之前的写作习惯一 ...
- 使用Python批量替换csdn文章的图片链接(解决csdn无法加载第三方图床的问题)
前言 笔者之前的写作习惯一直是在本地(Mac Typora Ipac)写好之后将markdown代码粘贴到csdn,图片是Ipac自动上传到微博匿名图床上,用了大概一年多都没有问题,直到前段时间突然发 ...
- 掘金外链即将失效?论如何用脚本一次性下载/替换失效的外链图片
前言 大约一个月前,微博的图片外链失效了,以及掘金因为盗链问题也于2019/06/06决定开启防盗链,造成的影响是:个人博客网站的引用了这些图片外链都不能显示. 目前微博和掘金的屏蔽,在CSDN和se ...
- 批量删除EXCEL里的软回车
批量删除EXCEL里的软回车 目的:查找excel单元格中的换行符(alt + enter),并且把它代替为空. 通过在查找框内(通过按ctrl + f调出),在[替换内容]内输入: 第1种方法:按住 ...
最新文章
- zabbix如何配置微信报警
- Scala集合体系:可变集合和不可变集合
- 命令行参数怎么输入_太好用了!谷歌开源的命令行接口工具fire
- Hive精华问答 | Hive和传统数据库有什么不同?
- java自定义注解实现日志功能
- Flex Gumbo中如何自定义HSlider数据Tip样式的例子
- Aruba 云服务代金券
- SourceTree 密码填写正确但是拉取显示密码错误解决
- 浑水摸「YY」、「侠盗」苹果和辛巴的「麦乳精」|极客一周
- 使用Python、pandas、pyecharts进行数据分析——实例讲解
- flush和evit
- c语言左移函数_corl_,crol(crol函数怎么左移)
- 人脸对齐实现“平均脸”制作
- ijkplayer 代码走读之 播放器网络数据读取过程详解2
- Hadoop3.2.0 HDFS DataNode管理员指南
- Pycharm2020.1安装中文语言插件教程,不需要汉化
- sql Server 创建临时表 嵌套循环 添加数据
- Acne Scars Treatment - Probably the Best Acne Scars Treatment Available
- 江苏学生考计算机要多少分录取,江苏高考多少名可以上211 最低要考多少分
- win10怎么练计算机一级,1步打造极限精简的win10系统,让老电脑像新机般流畅,再也不卡了...
热门文章
- 第一位程序员原来是一个女性!
- k8s 服务注册与发现(二)Kubernetes内部域名解析原理
- spark steaming的性能问题
- BeanUtils.populate的用法
- 微信公众号文章信息(阅读量、在看、点赞数)获取
- 记录一下向npmjs上发布包遇到的坑
- PHP可视化告警规则引擎,开源可视化规则引擎 决策引擎与规则引擎有什么区别?...
- 大数据时代,我们需要“被遗忘权”(转)
- A component required a bean of type ‘com.yida.data.religion.common.dao.AddressInfoMapper‘ that could
- 都说数据是资产,那么到底什么是数据资产?