Python玩转Excel的读写改实例


Posted in Python onFebruary 22, 2019

摘要:

  • 利用xlrd读取excel
  • 利用xlwt写excel
  • 利用xlutils修改excel

利用xlrd读取excel

先需要在命令行中pip install xlrd;读取xls文件的流程为:

加载文件->选中第几个表格->按先行后列的顺序读

通用demo

import xlrd
filename = "test.xls"        #文件路径
wb = xlrd.open_workbook(filename)  #加载这个xls文件
sh = wb.sheet_by_index(0)      #选中第1个表格
rows = sh.nrows           #rows为该表格的行数
for i in range(1,rows):       #从第二行开始按行读取
  title = sh.cell(i,0).value   #取第i+1行,第1列的数据

diy功能

根据列名获取内容的函数
def get_col_index(name,workbook,sheet):
  for i in range(sheet.ncols):
    name2 = sheet.cell(0,i).value
    print(name2)
    if name2 == name:
      return i
  return -1
sheet.cell(1,get_col_index("创建时间")).value

再拓展一点:

sh = wb.sheet_by_name(sheetname)  #通过表格名称选中表格
print(wb.sheet_names())       #打印该xls文件的所有表格名称
sh.row(i)              #获得第i+1行的所有数据组成的list
ncols = sh.ncols          #获得该表格的所有列数
sh.row_values(rowx, start_colx=0, end_colx=None)   #获取第rowx+1行的某几列的数据并组成的list
sh.col(colx, start_rowx=0, end_rowx=None) #获取第colx+1列的某几行的数据并组成的list
sh.cell(i,j).value         #获取第i+1行第j+1列的数据
sh.cell(i,j).ctype         #获取第i+1行第j+1列的数据类型

注意date类型

说起数据类型,补充一点,xlrd读取xls文件单元格的数据类型有五种,数字与类型的对应关系为:

ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

当单元格某个值为date类型时,不加处理输出的是一个浮点数,此时需要判断ctype并进行一次转换:

from xlrd import xldate_as_tuple
cell = sh.cell(i,10).ctype
if cell.ctype == 3:
  date = datetime(*xldate_as_tuple(cell.value, 0))

利用xlwt写exce

先需要在命令行中pip install xlwt;写xls文件的流程为:

加载文件->选中第几个表格->按先行后列的顺序读

通用demo

import xlwt
file = xlwt.Workbook()   #新建个文件
sheet = file.add_sheet('test_sheet0',cell_overwrite_ok=True) #新建个表格,指定表名以及是否可覆盖写
sheet.write(i,j,value)   #在第i+1行和第j+1列写value(i、j从0开始)
file.save("test_xls.xls")  #保存成xls文件并指定文件名

更多功能

#设置某列的宽度
sheet.col(0).width = 200
#写日期
style = xlwt.XFStyle()
style.num_format_str = 'D-MMM-YY' 
worksheet.write(0, 0, datetime.datetime.now(), style)
#写公式
sheet.write(1, 1, xlwt.Formula('SUM(A1,B1)'))
#合并单元格的写
sheet.write_merge(0, 0, 0, 3, 'First Merge')
#ps:
#write_merge(x, x + h, y, w + y, value, sytle) x和y表示当前行列,h和w为要合并的行数和列数

更炫酷一点

既然是写,何不来点style:

style = xlwt.XFStyle()
#修改字体:
font = xlwt.Font()       #为样式创建字体
font.name = 'Times New Roman'  #字体名称
font.bold = True        #黑体
font.colour_index = 2      #修改字的颜色
font.underline = True      #下划线
style.font = font        #使用到样式中
sheet.write(0,1,"编号",style)
#修改单元格背景色
pattern = xlwt.Pattern() 
pattern.pattern = xlwt.Pattern.SOLID_PATTERN 
pattern.pattern_fore_colour = 5 #色号,可以在源代码中看到色号和颜色的对应关系
style = xlwt.XFStyle()
style.pattern = pattern
sheet.write(0,2,"编号",style)

利用xlutils修改excel

修改excel文件的流程为:

将xlrd加载的xls文件(xlrd对象)复制为xlwt对象,然后用xlwt对象操作excel

demo

import xlrd 
import pymysql
from xlrd import open_workbook
from xlutils.copy import copy
import xlwt
file_name = "test_update.xls"
workbook = xlrd.open_workbook(file_name) 
sheet = wb.sheet_by_index(0)
workbook_update = copy(workbook) 
sheet_update = workbook_update.get_sheet(0)
sheet_update.write(i,j,value)
workbook_update.save(file_name)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python实现获取序列中最小的几个元素
Sep 25 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
Python中函数参数调用方式分析
Aug 09 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
Python如何脚本过滤文件中的注释
May 27 Python
Python urllib2运行过程原理解析
Jun 04 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
简单谈谈Python面向对象的相关知识
Jun 28 Python
Python操作配置文件ini的三种方法讲解
Feb 22 #Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 #Python
python调用虹软2.0第三版的具体使用
Feb 22 #Python
Python实现图片转字符画的代码实例
Feb 22 #Python
Python中正则表达式的用法总结
Feb 22 #Python
python ddt数据驱动最简实例代码
Feb 22 #Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 #Python
You might like
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
PHP 超链接 抓取实现代码
2009/06/29 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
Javascript编写2048小游戏
2015/07/07 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
js实现录音上传功能
2019/11/22 Javascript
Python3基础之list列表实例解析
2014/08/13 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python函数不定长参数使用方法解析
2019/12/14 Python
keras.layer.input()用法说明
2020/06/16 Python
Python设计密码强度校验程序
2020/07/30 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
中式餐厅创业计划书范文
2014/01/23 职场文书
市场营销求职信范文
2014/02/21 职场文书
会计专业求职信范文
2014/03/16 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
英语系本科生求职信
2014/07/15 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
公司更名通知函
2015/04/24 职场文书
教师节随笔
2015/08/15 职场文书
2016年国培研修日志
2015/11/13 职场文书
二年级数学教学反思
2016/02/16 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL