Python读execl之xlrd库函数详解二:单元格相关

Python读execl主要用到xlrd库,用到主要函数详解如下:

准备工作:

  • 准备工作和所用材料和《Python读execl之xlrd库函数详解一:工作簿相关》一致。
    在这里插入图片描述

库函数:

单元格相关

  • cell(self, rowx, colx) #获取单元格对象(附带单元格属性,比如单元格格式)
#-*- encoding:utf-8 -*-

import xlrd,json

def openexec():
    book1 = xlrd.open_workbook('datalist.xlsx') # 打开表格
    q = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(q.cell(4,3))	# 打印sheet2中单元格(4,3)的值,其实为(0,0)    
openexec()

输出结果为:text:u'12452' 备注:从表头2中可以看出(4,3)即为5行4列的值为12452,格式为文本

  • cell_value(self, rowx, colx) #获取单元格的值(不附带格式,只是单纯的获取值,比较常用)
	w = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(q.cell_value(2,2))

输出结果为:姓名

  • cell_type(self, rowx, colx) #获取单元格数据类型
	e = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(q.cell_type(2,2))

输出结果为:1,其中各数值对应如下:

        <table border="1" cellpadding="7">
        <tr>
        <th>Type symbol</th>
        <th>Type number</th>
        <th>Python value</th>
        </tr>
        <tr>
        <td>XL_CELL_EMPTY</td>
        <td align="center">0</td>
        <td>empty string ''</td>
        </tr>
        <tr>
        <td>XL_CELL_TEXT</td>
        <td align="center">1</td>
        <td>a Unicode string</td>
        </tr>
        <tr>
        <td>XL_CELL_NUMBER</td>
        <td align="center">2</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_DATE</td>
        <td align="center">3</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_BOOLEAN</td>
        <td align="center">4</td>
        <td>int; 1 means TRUE, 0 means FALSE</td>
        </tr>
        <tr>
        <td>XL_CELL_ERROR</td>
        <td align="center">5</td>
        <td>int representing internal Excel codes; for a text representation,
        refer to the supplied dictionary error_text_from_code</td>
        </tr>
        <tr>
        <td>XL_CELL_BLANK</td>
        <td align="center">6</td>
        <td>empty string ''. Note: this type will appear only when
        open_workbook(..., formatting_info=True) is used.</td>
        </tr>
        </table>
  • cell_xf_index(self, rowx, colx) #单元格数据区域大小(待考究,研究时发现,单元格中数据的长度和区域一样的话,返回的cell_xf_index值也是一样的)
	r = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(r.cell_xf_index(4,3))

输出结果为:结果出错,XLRDError: Feature requires open_workbook(..., formatting_info=True) 分析:根据出错信息,我们应该在打开文件的时候,应该使用 formatting_info=True,修改代码如下:

def openexec():
    book1 = xlrd.open_workbook('datalist.xlsx',formatting_info=True) # 打开表格,formatting_info参数取值为True时(为了节省内存,该参数默认为False),就会读取各种格式的信息。
    r = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(r.cell_xf_index(4,3))  
openexec()

输出结果为:结果还是出错,raise NotImplementedError("formatting_info=True not yet implemented") 分析:把文件格式改为datalist.xls打开OK,但是格式如果为datalist.xlsx,就会出错,所以我们需要把文件保存为datalist.xls,如下:

在这里插入图片描述

整理后的代码如下:

def openexec():
    book1 = xlrd.open_workbook('datalist.xls',formatting_info=True) # 打开表格,formatting_info参数取值为True时(为了节省内存,该参数默认为False),就会读取各种格式的信息。
    r = book1.sheet_by_index(1) # 使用索引的方式获取sheet2工作簿
    print(r.cell_xf_index(4,3))  
openexec()

输出结果为:77 这个cell_xf_index感觉像是单元格中数据区域的大小

本文转载于网络 如有侵权请联系删除

相关文章

  • CCF考试——201612-2工资计算

    概要问题描述  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:   1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;   2)A中不超过1500元的部分,税率3%;   3)A中超过1500元未超过4500元的部分,税率10%;   4)A中超过4500元未超过9000元的部分,税率20%;   5)A中超过9000元未超过35000元的部分,税率25%;   6)A中超过35000元未超过55000元的部分,税率30%;   7)A中超过55000元未超过80000元的部分,税率35%;   8)A中超过80000元的部分,税率45%;   例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,超过4500元部分应缴税(65

  • Leetcode 35. Search Insert Position

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢!https://blog.csdn.net/Quincuntial/article/details/80924641文章作者:Tyan 博客:noahsnail.com|CSDN|简书1.问题描述Givenasortedarrayandatargetvalue,returntheindexifthetargetisfound.Ifnot,returntheindexwhereitwouldbeifitwereinsertedinorder.Youmayassumenoduplicatesinthearray.Example1:Input:[1,3,5,6],5 Output:2复制Example2:Input:[1,3,5,6],2 Output:1复制Example3:Input:[1,3,5,6],7 Output:4复制Example4:Input:[1,3,5,6],0 Output:0复制2.求解Solution(C++):这道题就是一个二分查找问题。classSolution{ public: intsearchI

  • Firefox 即将启用全新 logo 设计

    关注我,你的眼睛会怀孕Mozilla的Firefox经过多年沉淀,其logo已成为PC用户最容易识别的标识之一。尽管Firefox之前也有陆续给其logo进行了一些调整,但基本上都是微调,整体形象未有明显改变。随着互联网的快速发展,Firefox正在以互联网为平台构建新型浏览器和一系列新的应用和服务,像是从简单的屏幕截图和文件共享,到使用语音和VR访问互联网,这些工具和创新将帮助用户更高效,更安全的管理他们的在线时间。也因此,Firefox认为,作为一个logo,目前这只带有火焰尾巴的敏狐未能很好的代表整个产品系列。就算再进行重新着色或分解狐狸也难以有大的改观,需要完全重新开始设计。Mozilla的产品和品牌设计师团队已经开始构建一个新的系统,以涵盖所有正在酝酿中的Firefox产品以及那些仍在新兴技术部门心目中的产品。他们在官方博客上分享了两种设计方案,以征求用户反馈意见。上述两个系统均由4个部分构成,首先,顶部的是主品牌(masterbrand)的图标,代表整个产品线。第一行包含FirefoxQuantum及其变体DeveloperEdition和Nightly浏览器图标。第二行是

  • 令仔代码收藏系列(二)----BASE64编码

    packagecom.flight.inter.otaadapter.commons.util; importorg.apache.commons.codec.binary.Base64; importjava.io.UnsupportedEncodingException; publicclassBase64Util{ /** *将strVal进行BASE64编码 * *@paramnoneBase64Str *@return *@throwsjava.io.UnsupportedEncodingException */ publicstaticStringencode(StringnoneBase64Str) throwsException{ try{ returnnewString(Base64.encodeBase64(noneBase64Str.getBytes()),"UTF-8"); }catch(Exceptione){ throwe; } } publicstaticStringencode2Str(byte[]noneBase64St

  • Java泛型基础(二)泛型接口泛型方法# 总结

    本文首发于个人网站:Java中的泛型(二) 泛型可以应用于同一个类,该类可以针对多种类型使用,例如构建一个RedisTemplateService组件,用于处理当前应用中所有对象的缓存操作。这篇文章主要介绍泛型应用于接口、方法和匿名内部类的一些知识点和使用案例,也包括《Java编程思想》中对应的练习题的解读。泛型接口泛型应用于接口,是工厂方法设计模式的一种应用。我使用《Java编程思想》中的例子进行了练习。下面这个例子中,CoffeeGenerator用于生成随机的Coffee对象。packageorg.java.learn.generics.coffee; importorg.apache.commons.lang3.RandomUtils; importorg.java.learn.util.Generator; importjava.util.Iterator; /** *实现Iterable接口,表示当前类可以用在循环语句中 * *作用:User:duqiDate:2017/11/30Time:22:58 */ publicclassCoffeeGeneratorimpl

  • 诡异的druid链接池链接断开故障经验总结

    背景 症状 排查 修复 背景 最近在陆续做机房升级相关工作,配合DBA对产线数据库链接方式做个调整,将原来直接链接读库的地址切换到统一的读负载均衡的代理haproxy上,方便机柜和服务器的搬迁。 切换之后线上时不时的会发生discardconnection错误,导致程序报500错误,但不是每次都必现的。 开发框架:springboot+mybatis+druid+shardingJDBC 网络架构: appserver->mysql(master)写 appserver->haproxy->mysql(slave)/n读 第一反应肯定是因为这次的读库地址的变动引起的问题,觉得问题应该是druid链接池中的connection保活策略没起作用,只要做下配置修改应该就可以了。结果这个问题让我们排查了好几天,我们竟然踩到了千年难遇的深坑。 这个问题排查的很坎坷,一次次的吐血,最终我们定位到问题并且优雅的修复了,我们一起来体验下这个一次一次让你绝望一次一次打脸的过程。 症状 先说故障症状,经常出现如下错误: discardconnection com.mysql.

  • Java第六次作业

    上机练习1.使用for循环计算1-100的和,除了以3结尾的那些数 publicclassfor循环计算{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub intsum=0; for(inti=1;i<=100;i++){ if(i%10!=3) sum+=i; }System.out.println(sum); } }复制 2.使用二重循环输出一下图形  * *** ************ publicclass输出图形{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub for(inti=0;i<=4;i++){ for(intj=0;j<=4-i;j++) System.out.print(""); for(intk=1;k<=2*i-1;k++) Syste

  • WPF 多线程处理(1)

    WPF多线程处理(1) WPF多线程处理(2) WPF多线程处理(3) WPF多线程处理(4) WPF多线程处理(5) WPF多线程处理(6)   废话不多说,先上图: 多线程处理数据后在this.Dispatcher.Invoke()调用委托后将值更新到界面,这样尤其是在处理大数据的时候界面会实时更新,主线程界面不会假死, 不会影响用户体验,希望这篇文章为小朋友起到抛砖引玉的效果:   选中一行的样式:   下面的图是处理这些数据,批量处理速度很快:     下一篇:WPF多线程处理(2) 作者:风清扬No.1 出处:http://www.cnblogs.com/fengqingyangNo1 如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。 如果,您希望更容易地发现我的新博客,不妨点击一下右下角的 【关注风清扬No.1】。 因为,我的写作热情也离不开您的肯定支持。 感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客.

  • 博客园样式优化小记

    趁休息在家,对博客园的官方主题样式做了下细调,算是符合了点个人审美,为后续在园子写博文增加点"审美动力"。 纯原生js,css,未使用jQuery,你可以按你习惯修改、简化、优化js部分。 目前的一些不足: 因时间原因,目前"悬浮目录"部分仅支持h2,h3,即("##"和"###"),如果你改写了该部分,期待你的分享:) 通过本文你可以获得: 至少是跟我一样的主题布局,:P 节约一点你的时间,代码层面提供一些优化、实现思路。 先决条件 博客主题需为:ThinkInside 你需要先在[设置]中申请开通js权限,申请入口如下(只要你是未开通JS权限的,就会显示需要开通) 优化开始 1.JS部分 在如下位置增加js代码: js如下: <scripttype="text/javascript"> varBlogDirectory={ /* 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) */ getElementPosition:function(ele){ vartopPosition=0; varleftPosition=

  • 考研规划

    理论上 8:00-11:30数学 13:30-17:00专业课 晚上填坑+英语保底两篇阅读吧 22:15-23:30政治

  • SQL预编译中order by后为什么不能参数化原因

    一、背景 上周五有个朋友说,防sql注入都用参数化的方法,但是有些地方是不能参数化的。比如orderby后就不能参数化,她有个同事挖sql注入时找有排序功能需求的位置(比如博客常按时间排序),基本十之六七都能挖到sql注入。 某些地方不能参数化,这个问题在以前面试时有被问过,但回答不上来,后来也没太关心,所以确实也就一直不太懂。 orderby后不能参数化我是第一次听说的,进一步追问原理她归究为mysql的bug,这说法实在不敢恭维,所以就找时间自己研究了一下。   二、不能参数化的根本原因 2.1 以java为例进行说明 典型的java写的sql执行代码片段如下: Connectionconn=DBConnect.getConnection(); PreparedStatementps=null; ResultSetrs=null; Stringsql="SELECTpasswdFROMtest_table1WHEREusername=?"; ps=conn.prepareStatement(sql); #通过setString()指明该参数是字符串类型 p

  • $(&quot;parent &gt; child&quot;)、$(&quot;A B&quot;)、$(&quot;div#test&quot;)、$(&quot;div,#test&quot;)、$(&quot;.test&quot;,&quot;div&quot;) 几个特殊的选择器

    转自:http://blog.csdn.net/zm2714/article/details/8128747   这个标题似乎有些奇怪,但这些都是合法有效的jquery选择器。在这里将他们逻列一起,是因为他们比较容易引起混淆。下面就通过例子来说明他们之间的不同之处。 $("parent>child") [html]viewplaincopy <div>     <span>123</span>     <p>       <span>456</span>     </p>     <span>789</span>   </div>   [javascript]viewplaincop

  • 7.10LJY

     importjava.util.Scanner; publicclassSsqGame{     publicstaticvoidmain(String[]args){                  inttotalMoney=0;//下注总费用          intprice=2;//双色球单价每注2元          intcount=0;//购买了彩票的注数         booleanisBuy=false;//标识是否购买了彩票       

  • K Sum(2 Sum,3 Sum,4 Sum,3-Sum Closest)

    算是经典算法问题了。这里主要针对只存在一个解或者只需要求一个解的情况描述一下解题思路。若需要找到所有可能解,方法需要略作调整。如有问题,欢迎指正。 2sum: 如果已排序,可直接用夹逼法,即两指针从头尾向中间移动,使和靠近target。时间复杂度为O(n)。 若未排序,因为除非有特别限制,比较排序的时间复杂度为O(nlgn)。此时用hash更为合适,可以达到O(n)的时间复杂度。此方法实际上对已排序数组也实用。步骤如下: 每一个数a在放入hash表前,判断目标target-a是否在hash表内,如果在,则找到解。否则将a放入表中。 这种方法比先完整构建hash表再检查少扫描一遍数组。 ksum(k>=3):   一个通用的方法就是先排序,然后依次固定序列中的一个数,对其后的所有数递归做k-1sum。这样的时间复杂度是O(nk-1)。 4Sum: 除了上面ksum的方法外,另一个方法是降到k/2=2sum。方法大致如下: 把原数组的元素两两求和(非相同序号,个数为O(n2)),记录在一个结构体单元内,其中包含此和以及对应两元素的原始index,时空复杂度均为O(n2) 以两两和为关

  • 剑指offer[37]——数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数。 因为题目中所给的数组是排序的,所以我们只需要求出第一个出现的位数和最后一个出现的位数即可求出数字在该数组中出现的次数。 \[4-2+1=3 \]functionGetNumberOfK(data,k) { letstart=data.indexOf(k); letend=data.lastIndexOf(k); if(start==-1){return0;} returnend-start+1; } 复制 我不管,JS天下第一

  • 利用JACK在Windows下PC之间传递声音

    因为之前订购的AlienwareAlpha快到了,但是只有HDMI一个口,没有普通3.5mm音频插口,而我用的则是HDMI-DVI的线接入显示器,这直接导致没有声音了,没声音这能叫游戏机么……反正真机还没来,先做好准备工作:在两台PC之间搭建一个传递音频的通道。首先Google了一下,发现有这样的东西:https://blogs.gentoo.org/mgorny/2015/01/16/surround-sound-over-network-with-windows-8/总之试了之后感觉很麻烦,而且没成功。不过转念一想,俩电脑都有蓝牙,不如建立连接然后蓝牙播放。因为记得Y450的蓝牙可以打电话、听手机音乐什么的,想着PC功能这么强大肯定可以,结果发现根本连什么Profile都没有啊!WDK的驱动sample完全不知道在哪!不搞了。因为头一次看的没搭建成功,第二天仔仔细细从头到尾读了一遍,发现我只需要立体声,所以那篇博客说的似乎太麻烦了。 因为是按照那篇博客来做的,所以顺序也差不多:我这里需要的软件是:JACK2服务器,这个在每台电脑上都得有。VB-AudioCable:虚拟声

  • 屏蔽某些地区显示效果22

    <scriptsrc="http://pv.sohu.com/cityjson?ie=utf-8"></script> <scripttype="text/javascript"> //document.write(returnCitySN["cip"]+','+returnCitySN["cname"]); vars=returnCitySN["cname"].substring(0,6); vard=returnCitySN["cname"].substring(0,3); if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|WindowsPhone)/i))){ if(d=='北京市'||d=='上海市'||s=='广东省深圳市'){ window.location.href="

  • 20 http协议中各个响应状态200_301_404_500等返回值含义快速一览

    http协议中各个响应状态 200_301_404_500等返回值含义快速一览 一、定义 从HTTP的定义可以看出,HTTP协议是互联⽹上进⾏ ⼆、概述 HTTP是基于TCP/IP协议的应⽤层协议。HTTP允许进⾏客户端和服务器之间的通信。通过HTTP或HTTPS请求的资源由URI(统⼀资源标识符)或URL(统⼀资源定位符)来标识。在客户端-服务器的模式中,HTTP扮演着请求-响应协议的⾓⾊。客户端(通常是浏览器)提交HTTP请求消息给服务器。服务器可以提供HTML⽂件或其他类型的资源,或者代表客户端执⾏操作,返回响应消息给客户端。响应包含关于请求的完整状态信息。   三、状态码 [root@k8s-master01~]#curlbaidu.com-I HTTP/1.1200OK Date:Mon,21Feb202207:39:28GMT Server:Apache Last-Modified:Tue,12Jan201013:48:00GMT ETag:"51-47cf7e6ee8400" Accept-Ranges:bytes Content-Length:81 Cach

  • 大学实验报告Latex模板

    效果展示 Latex代码 \documentclass[12pt,a4paper,oneside,UTF8]{ctexart} %设置页边距 \usepackage[left=1.91cm,right=1.91cm,top=2.54cm,bottom=2.54cm]{geometry} %需要用到的扩展包 \usepackage{xeCJK,amsmath,paralist,enumerate,booktabs,multirow,graphicx,float,subfig,setspace,listings} \include{caption} \usepackage{lastpage} \usepackage{hyperref} \usepackage{fancyhdr} %去掉链接的红色外框 \hypersetup{ colorlinks=true, linkcolor=black } %设置页眉页脚以及页码 \pagestyle{fancy} \lhead{XXXX大学实验报告} \rhead{《多物理场仿真》} \cfoot{\thepage~/~\pageref*{L

  • 使用缓存方式优化递归函数与lru_cache

    摘自:https://www.cnblogs.com/sfencs-hcy/p/10171457.html   一.递归函数的弊端 递归函数虽然编写时用很少的代码完成了庞大的功能,但是它的弊端确实非常明显的,那就是时间与空间的消耗。 用一个斐波那契数列来举例 importtime #@lru_cache(20) deffibonacci(n): ifn<2: return1 else: returnfibonacci(n-1)+fibonacci(n-2) t1=time.time() print(fibonacci(35)) t2=time.time() print(t2-t1)#4.007285118103027 t1=time.time() print(fibonacci(36)) t2=time.time() print(t2-t1)#6.479698419570923 复制 前面输入的数较小,所以算的还算很快,但输入到35、36来测试时已经要花上好几秒来计算了,而且36比35计算时间多了两秒多,可想而知数据再增大后消耗的时间增加的是越来越大的,因为这个递

  • 2022-2023学年 20211319蓝宇 《信息安全专业导论》第四周学习总结

    作业信息 |2020-2021-1信息安全专业导论|https://edu.cnblogs.com/campus/besti/2020-2021-1fois |2020-2021-1信息安全专业导论第三周作业|第三周作业(必学,选做)-作业-2021-2022-1信息安全专业导论-班级博客-博客园(cnblogs.com) 作业目标: 计算机科学概论第4章,第5章并完成云班课测试 《看漫画学Python》第4,5章并完成云班课测试 教材学习内容总结 第四章 1、这一章讨论了计算机如何通过控制最底层的电流进行运算。由于我们讨论的是使用二进制信息的数字计算机,所以只关注两个电瓶范围,它们分别表示为二进制数字1和0。电流由称为“门”的电子设备操纵,门负责执行基本的逻辑运算,如非运算、与运算和或运算。门是由一个或多个晶体管创建的,晶体管的发明使计算机学发生了翻天覆地的变化。 2、把一个门的输出作为另一个门的输入可以把门组合成电路,仔细设计这些电路,可以创建出能执行更复杂任务(如求和、多路复用和存储数据)的设备。门的集合(或者说完整的电路)常常被嵌入在一个集成电路(或芯片)中,这引出了中央处理器

相关推荐

推荐阅读