Python读写Excel表格,就是这么简单粗暴又好用
off999 2024-11-07 11:39 24 浏览 0 评论
最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理。
但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理。
以前正好在一本书上看到过,使用Python来处理Excel表格,可惜没有仔细看。
于是我到处查找资料,基本解决了日常所需,终于算是完成了任务,因此撰写此文就算是总结吧,主要记录使用过程的常见问题及解决。
Python操作Excel,主要用到xlrd和xlwt这两个库,即xlrd是读Excel,xlwt是写Excel的库。
可从这里下载https://pypi.python.org/pypi。下面分别记录Python读和写Excel。
- Python写Excel——xlwt
Python写Excel的难点,不在构造一个Workbook的本身,而是填充的数据,不过这不在范围内。
在写Excel的操作中,也有棘手的问题,比如写入合并的单元格,就是比较麻烦的,另外写入还有不同的样式。
详细代码如下:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import xlwt
设置表格样式
def set_style(name,height,bold=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style
写Excel
def write_excel():
f = xlwt.Workbook()
sheet1 = f.add_sheet('学生',cell_overwrite_ok=True)
row0 = ["姓名","年龄","出生日期","爱好"]
colum0 = ["张三","李四","恋习Python","小明","小红","无名"]
写第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
写第一列
for i in range(0,len(colum0)):
sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))
sheet1.write(1,3,'2006/12/12')
sheet1.write_merge(6,6,1,3,'未知')#合并行单元格
sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格
sheet1.write_merge(4,5,3,3,'打篮球')
f.save('test.xls')
if name == 'main':
write_excel()
</pre>
结果图:
在此,对write_merge()的用法稍作解释,如上述:sheet1.write_merge(1,2,3,3,'打游戏'),即在四列合并第2,3列,合并后的单元格内容为"合计",并设置了style。其中,里面所有的参数都是以0开始计算的。
- Python读Excel——xlrd
Python读取Excel表格,相比xlwt来说,xlrd提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期、读合并单元格内容。
下面先看看基本的操作:
(图表数据)
整体思路为,打开文件,选定表格,读取行列内容,读取表格内数据
详细代码如下:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import xlrd
from datetime import date,datetime
file = 'test3.xlsx'
def read_excel():
wb = xlrd.open_workbook(filename=file)#打开文件
print(wb.sheet_names())#获取所有表格名字
sheet1 = wb.sheet_by_index(0)#通过索引获取表格
sheet2 = wb.sheet_by_name('年级')#通过名字获取表格
print(sheet1,sheet2)
print(sheet1.name,sheet1.nrows,sheet1.ncols)
rows = sheet1.row_values(2)#获取行内容
cols = sheet1.col_values(3)#获取列内容
print(rows)
print(cols)
print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式
print(sheet1.cell_value(1,0))
print(sheet1.row(1)[0].value)
</pre>
运行结果如下:
那么问题来了,上面的运行结果中红框框中的字段明明是出生日期,可显示的确实浮点数;同时合并单元格里面应该是有内容的,结果不能为空。
别急,我们来一一解决这两个问题:
1.Python读取Excel中单元格内容为日期的方式
Python读取Excel中单元格的内容返回的有5种类型,即上面例子中的ctype:
ctype : 0 empty,1 string,2 number, 3 date,4 boolean,5 error
即date的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式,先判断表格的ctype=3时xldate才能开始操作。
详细代码如下:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import xlrd
from datetime import date,datetime
print(sheet1.cell(1,2).ctype)
date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)
print(date_value)
print(date(date_value[:3]))
print(date(date_value[:3]).strftime('%Y/%m/%d'))
</pre>
运行结果如下:
2.获取合并单元格的内容
在操作之前,先介绍一下merged_cells()用法,merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1, 3, 4, 5)的含义是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含义是:第2到4列合并。
详细代码如下:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">print(sheet1.merged_cells)
print(sheet1.cell_value(1,3))
print(sheet1.cell_value(4,3))
print(sheet1.cell_value(6,1))
</pre>
运行结果如下:
**发现规律了没?是的,获取merge_cells返回的row和col低位的索引即可! **于是可以这样批量获取:
详细代码如下:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">merge = []
print(sheet1.merged_cells)
for (rlow,rhigh,clow,chigh) in sheet1.merged_cells:
merge.append([rlow,clow])
for index in merge:
print(sheet1.cell_value(index[0],index[1]))
</pre>
运行结果跟上图一样,如下:
Python读写Excel表格,就是这么简单粗暴又好用,如果觉得不错,对你工作中有帮助,动动手指分享给更多人哦。
本文就到这里啦,喜欢python可以关注我们哦!
相关推荐
- 可以免费下载音乐的app(可以免费下载音乐的软件并传到U盘)
-
目前市场上有不少免费的音乐下载软件,比如QQ音乐、网易云音乐等。这些免费的音乐下载软件一般会提供不同种类的音乐,从流行歌曲到经典老歌都可以找到,除此之外,这些软件还会针对用户进行推荐,根据用户的音乐口...
- office2007免安装绿色版(office2007绿色完整版)
-
把你的绿色版删除!附件的压缩包里有微软提供的卸载程序!运行一遍就可以了!office2007哪个版本好?针对office2007哪个版本好,office2007的版本主要有office2007官方下载...
- 魔兽官方对战平台(魔兽官方对战平台什么时候回归)
-
魔兽争霸的对战平台每个时间段都不一样。以前最后的就是浩方队员平台,还有QQ对战平台,后来又出来了vs对战平台。其中开始的浩方平台高手多,后来vs平台出来后大量高手都跑过去了,QQ平台一般菜鸟比较多。...
- 三国策略手游(三国策略手游试玩)
-
率土之滨官方版是一款超级好玩的全新策略三国竞技冒险手游,高清质风格的游戏画面能够带你体验全新的策略战斗,高度自由的竞技玩法,玩家可以在游戏中打造属于自己的三国世界1、《极无双》:3D动作军团征战手游《...
- 在线音频转换器(在线音频转换器Audio)
-
音频转换器是一种工具,它可以将一个音频格式转换成另外一个格式。使用它非常简单,首先打开音频转换器软件,然后选择需要转换的音频文件,设置输出格式和参数,最后点击转换按钮即可完成转换。注意,在设置输出格式...
- 拼音输入法哪个最好用(电脑打字常用输入法)
-
拼音输入法推荐使用谷歌拼音输入法。谷歌的拼音输入法,有五大特色:智能输入:选词和组句准确率高,能聪明地理解您的意图,短句长句,随想随打。时尚语汇:海量词库整合了互联网上的流行语汇和热门搜索词。...
- ps软件官方免费下载电脑版免费
-
1:点击下载好的安装包先进行解压,然后点击“Photoshop_CS6_CHS_lite.exe”文件2:在弹开的界面中点击“自定义安装”,这里小编说明一下,如果用户选择“快速安装”的话,那么软件的安...
- 传奇盒子平台大全(传奇盒子赚钱)
-
在996传奇盒子中,会员玩家可以在“我的游戏”中通过“云玩”进入之前体验过的传奇游戏,开启挂机模式后,就能在“云多开”系统里观察到自己的云设备和正在进行云游戏状态的传奇游戏,如果点进手机后台,还能看到...
- pdf查看软件(查看pdf格式的软件)
-
pdf当然可以有查找功能:1、第一步:首先我们要使用WPSOffice打开PDF文档。2、第二步:我们需要依次点击“开始”--->“查找”(或使用快捷键“Ctrl+F”)。3、第三步:我们在查...
- 中国象棋下载安装(下载中国象棋官方版)
-
不用刻意下载个中国象棋APP,只需要下载一个QQ游戏,里头就有中国象棋玩了,里头点开后,自动下载,还可以连接其他玩家,一起玩,切磋棋艺。你这问题太模糊了。。。是你有一个象棋游戏,想放到桌面上,双击就可...
- 手机bt下载软件哪个好(手机有什么下载bt的软件)
-
磁力下载app推荐黑科技APP,这个好用黑科下载器APP也是一款功能强大且使用的下载类工具应用,它支持磁力以及种子文件的下载。还可以把下载的的文件转存到云盘,并支持在线的云播预览功能,无需等待能直接边...
- 狂野飙车9下载(狂野飙车9下载入口)
-
您可以在AppStore搜索“狂野飙车9”或者直接使用Safari等浏览器搜索“狂野飙车9官方下载”,进入官网下载页面,点击下载按钮并根据提示进行下载安装即可。在下载前请确保您的苹果设备已连接稳定...
-
- 免费相册视频制作软件(怎么把拍的照片做成视频)
-
电脑端1.会声会影会声会影上手简单而且做出的相册的效果也很不错,很适合新手使用,x7以前的版本都是可以自己去免费用的。2.premiere(pr)pr是一款比较专业的视频剪辑制作软件,用它来做电子相册也是很不错的,做出的效果很高大上,如果只...
-
2026-01-17 21:43 off999
- 图片文字修改神器免费(手机无痕修改图片文字软件)
-
首先区分是完整图片导入还是ai软件自己编写的文字,如果导入的图片无法修改,只能像ps一样去修图,如果是软件编写的,无法选取先要解锁,方法:上面任务栏对象-选择全部解锁。然后修改。修改方法:如果对方编组...
- 开户最忌三个证券公司(随便哪个证券公司开户都一样吗)
-
在不同的证券公司开户,确实存在一些区别。首先,不同的证券公司提供的交易品种和交易费用可能不同,有些公司可能提供更广泛的投资选择,而有些公司则可能提供更低的佣金率,这直接影响到您的投资成本和收益。其次,...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
Python 批量卸载关联包 pip-autoremove
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
