实际工作中,我们经常会把表格某个区域(如: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

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

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

使用python对Excel表格某个区域保存为图片的更多相关文章

  1. python 对Excel表格的写入

    python对Excel表格写入需要导入xlrd ,和xlutils两个库 from xlrd import open_workbook from xlutils.copy import copy o ...

  2. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  3. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

  4. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  5. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  6. Python读写Excel表格

    最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...

  7. python - 操作excel表格

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  8. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

  9. Python读取Excel表格

    前言:需要进行自动化办公或者自动化测试的朋友,可以了解下此文,掌握Python读取Excel表格的方法. 一.准备工作: 1.安装Python3.7.0(官网下载安装包) 2.安装Pycharm(官网 ...

  10. python 处理 Excel 表格

    see: http://www.cnblogs.com/sunada2005/p/3193300.html 一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表 ...

随机推荐

  1. 关于 Linux 中模拟鼠标

    问题的背景是我想用自动化脚本来玩 Stardew Valley 的小游戏,刷钱,但是遇到了一系列问题,这里记录我的一些历程. pyautogui/pydirectinput pyautogui 是我第 ...

  2. AGC043

    AGC043 A.Range Flip Find Route 简单DP B.123 Triangle 推性质. 利用模运算将减法变成加法(在绝对值0/1的情况下). Giant Graph 类似于博弈 ...

  3. 打开TLS 1.1和1.2而不影响其他协议

    打开TLS 1.1和1.2而不影响其他协议 System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 ...

  4. Kubernetes监控手册02-宿主监控概述

    咱们这个系列是讲解 Kubernetes 监控,Kubernetes 自身也是要跑在机器上的,那机器的监控自然也是整个体系的一环.机器层面的监控分为两部分,带内网络和带外网络,通过带内网络做监控主要是 ...

  5. 基于阿里Anolis OS8.8 的Hadoop大数据平台建设

    基于阿里Anolis OS8.8 的Hadoop大数据平台建设 VNC安装与使用 0 Anolis OS基本操作 0.1 Anolis OS用户与组管理 0.2 系统进程管理 0.3 文件操作命令及权 ...

  6. python根据文件目录批量过滤空行

    import shutil import os path = "E:\\in\\" #文件夹操作目录 path2 = "E:\\out\\" #文件夹输出目录 ...

  7. radis简单学习笔记

    原来写接口只用了本机缓存cache 来学习一下radis,用法应该跟cache一样吧,为了配套负载均衡的多服务器是多个服务器都可以读取缓存 一.下载 找了好长时间 github有的时候能上有的时候就上 ...

  8. (数据科学学习手札162)Python GIS神器geopandas 1.0版本发布

    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在昨天,Python生 ...

  9. 设备树DTS 学习: 4-uboot 传递 dtb 给 内核

    背景 得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用. (高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树) Linux 内 ...

  10. 超大容量 | 瑞芯微RK3588J工业核心板新增16GB DDR + 128GB eMMC配置!

    作为瑞芯微的金牌合作伙伴,创龙科技在2023年9月即推出搭载瑞芯微旗舰级处理器RK3588J的全国产工业核心板--SOM-TL3588. SOM-TL3588工业核心板是基于瑞芯微RK3588J/RK ...