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 + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
Django的models中on_delete参数详解
Jul 16 Python
Django多数据库的实现过程详解
Aug 01 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
python实战之90行代码写个猜数字游戏
Apr 22 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
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
主持人演讲稿
2014/05/13 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
2014年物流工作总结
2014/11/25 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
好好学习保证书
2015/02/26 职场文书
八年级作文之我的母亲
2019/12/10 职场文书