首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

使用python对Excel表格某个区域保存为图片

编程知识
2024年08月04日 16:10

  实际工作中,我们经常会把表格某个区域(如:A1:F5)或某个图形保存为图片,如何用python自动做到这一点?不知屏幕前的小伙伴有没有遇到过类似的需求,此刻脑海里有木有一丢丢思路。

  python操作excel的第三方库有很多,个个都有各自的绝招和擅长的应用场景,简单罗列一下:

  • pyexcel:pyexcel是一个用于读写Excel、CSV和其他文件格式的库,提供了简单易用的接口。
  • pandas-ExcelWriter:这是Pandas库的一个模块,用于将数据写入Excel文件。
  • DataNitro:DataNitro是一个插件,可以在Excel中使用Python脚本,实现数据处理和分析。
  • pyxlsb:pyxlsb是一个用于读取Excel二进制文件(xlsb格式)的库。
  • Pandas:Pandas是一个强大的数据处理库,可以读取、写入和操作Excel文件。
  • OpenPyXL:OpenPyXL是一个专门用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。
  • XlsxWriter:XlsxWriter是一个用于写入Excel文件的库,支持Excel 2007 xlsx文件格式。
  • xlrd / xlwt:这两个库分别用于读取和写入Excel文件,支持Excel 2003以前的xls文件格式。
  • pywin32(win32com.client):这个库可以显式(或隐式)地打开excel进行一列操作,语法基本完全沿用VBA中的语法,只需要稍加pythonic改造。

  这些库提供了诸多的功能和特性,几乎涉及到表格处理的方方面面,可以根据项目需求选择最适合的库来处理Excel表格。具体到我们今天的场景,使用win32com.client是最优解,因为它可以用到vba中已经提供的图片类API,比如-复制-选择性粘贴-粘贴为图片。

需要说明的是,为了区域转图片成功,必须做到以下几点:

1、当前工作表处于选中状态;

2、当前区域必须至少部分肉眼可见;

3、当前表格的显示比例需要默认为100%。

为了避免截图后的图片是漆黑(无色)的底色,建议提前将对应单元格区域的背景色设置为白色或者其他颜色。

有了这些前提后,就可以用单元格区域的copyPicture()方法将单元格区域数据写入剪贴板,再借助PIL库的ImageGrab.grabclipboard()方法从剪贴板获取数据,并保存为图片啦。

先看看CopyPicture的语法,如何设置参数。

 

完整的python示例代码如下:

 1 from PIL import ImageGrab
 2 import win32com.client as win32
 3 from win32api import RGB
 4 
 5 def capture_sheet_range_to_picture(sheetFilePath,sheetName,sheetRange,imgFilePath):
 6     '''从某个excel的某个表中的某个区域截图,并保存为图片
 7        sheetRange:str,如:"A1:E100" 
 8     '''
 9     # 启动Excel应用
10     xlApp =  win32.Dispatch('Excel.Application')
11     xlApp.Visible=True
12     # 打开目标Excel文件
13     workbook = xlApp.Workbooks.Open(sheetFilePath)
14     # 选择指定的工作表
15     detailSheet = workbook.Sheets(sheetName)
16     xlApp.ActiveWindow.ScrollRow = 2 #将水平滚动条拉到最上方
17     xlApp.ActiveWindow.ScrollColumn = 2 
18     xlApp.ActiveWindow.Zoom = 100 # 调整表格的缩放为100%显示
19 
20     detailSheet.Range(sheetRange).Interior.Color = RGB(255,255,255) # 纯白色
21     time.sleep(0.3)
22     # 将区域复制为图片
23 
24     try:
25         detailSheet.Range(sheetRange).CopyPicture(1,2)
26         img = ImageGrab.grabclipboard()  # 获取图片数据
28         img.save(imgFilePath)
29     except Exception as e:
30         # 如果截图失败,则重试一次
31         time.sleep(0.3)
32         detailSheet.Range(sheetRange).CopyPicture(1,2)
33         img = ImageGrab.grabclipboard()  # 获取图片数据
34         img.save(imgFilePath)
35     # 关闭工作簿并退出Excel
36     workbook.Close(SaveChanges=False)
37     xlApp.Quit()
38     return 

  这段代码【信息量】很大,您可别不信,都是小爬我一遍遍踩坑才得来的宝贵经验哟,相信您已经受到了不少启发,那就动手试试吧,一定会收获满满。

快来关注本公众号 获取更多爬虫、数据分析的知识!

From:https://www.cnblogs.com/new-june/p/18289209
本文地址: http://shuzixingkong.net/article/773
0评论
提交 加载更多评论
其他文章 使用 C# 和 ONNX 來玩转Phi-3 SLM
LLM 席卷世界刷新 AI 的认知之后,由于 LLM 需要的硬件要求实在太高,很难在普通设备上运行,因此 SLM 逐漸受到重視,Phi-3 SLM 是由 Microsoft 所开发的模型,可以在你的电脑、手机等设备来运行,小型语言模型 (SLM) 和 ONNX 的结合改变了 AI 互操作性的游戏规则
使用 C# 和 ONNX 來玩转Phi-3 SLM 使用 C# 和 ONNX 來玩转Phi-3 SLM
使用Aspire优雅的进行全栈开发——WinUI使用Semantic Kernel调用智普清言LLM总结Asp.Net Core通过Playwright解析的网页内容
前言 这算是一篇学习记录博客了,主要是学习语义内核(Semantic Kernel)的实践,以及Aspire进行全栈开发的上手体验,我是采用Aspire同时启动API服务,Blazor前端服务以及WinUI的桌面端项目,同时进行三个项目的代码修改,整体感觉很方便,如果代码都修改了只需要启动Aspir
使用Aspire优雅的进行全栈开发——WinUI使用Semantic Kernel调用智普清言LLM总结Asp.Net Core通过Playwright解析的网页内容 使用Aspire优雅的进行全栈开发——WinUI使用Semantic Kernel调用智普清言LLM总结Asp.Net Core通过Playwright解析的网页内容 使用Aspire优雅的进行全栈开发——WinUI使用Semantic Kernel调用智普清言LLM总结Asp.Net Core通过Playwright解析的网页内容
位段 -- 内存布局详解C语言
目录位段的介绍位段使用示例:位段的内存分配Example内存分配解析: ## 位段 位段的介绍 位段(二进制位):就是按位存储 位段(bit-field)是C语言中的一种特殊数据类型,它允许将一个字节分成几个部分,并为每个部分指定特定的位数,以便在内存中存储和访问这些部分。 其中位段相较于结构体有两
位段 -- 内存布局详解C语言
HTML 编辑器
使用像Notepad(在Windows上)或TextEdit(在MacOS上)这样的基本文本编辑器来学习HTML是一个非常棒的开始。这些工具虽然简单,但足以让你编写并查看基本的HTML代码,帮助你理解HTML的结构和语法。下面我将详细解释每一步,确保你能成功创建并查看你的第一张HTML网页。 步骤一
三.mysql问答合集
目录三.MySQL3.1 关系型和非关系型数据库的区别关系型数据库非关系型数据库3.2 登录数据库的方式,如何远程登录3.3 MySQL的服务结构,当客户端发起请求后,处理过程3.4 如何设置或者重置MySQL密码3.5 DDL,DML,DQL,DCL等SQL语句的写法DDL数据定义语句DCL数据控
三.mysql问答合集 三.mysql问答合集 三.mysql问答合集
Jenkins API用户认证方式
1、概述 Jenkins的API可以通过用户名+密码或者用户名+Token的方式来进行认证,这篇文章以具体示例来说明具体的使用方式。 2、Jenkins环境 本文示例基于Jenkins 2.452.3版本进行演示,详细的环境构建可参考《Centos7下安装配置最新版本Jenkins(2.452.3)
Jenkins API用户认证方式 Jenkins API用户认证方式 Jenkins API用户认证方式
代码随想录Day4
24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3:
代码随想录Day4 代码随想录Day4 代码随想录Day4
使用django-treebeard实现树类型存储与编辑
前言 其实之前做很多项目都有遇到跟树相关的功能,以前都是自己实现的,然后前端很多UI组件库都有Tree组件,套上去就可以用。 不过既然用 Django 了,还是得充分发挥一下生态的优势,但是我找了半天,也就这个 treebeard 能用,其他要不停更了要不就功能很拉,没有可视化编辑树的功能。 难道D
使用django-treebeard实现树类型存储与编辑