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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python自动化测试工具Splinter简介和使用实例
May 13 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
python读写配置文件操作示例
Jul 03 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
Python如何读写二进制数组数据
Aug 01 Python
Django model class Meta原理解析
Nov 14 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
在python中实现导入一个需要传参的模块
May 12 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
vue上传图片组件编写代码
2017/07/26 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
webpack4.x打包过程详解
2018/07/18 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python实现聚类算法原理
2018/02/12 Python
python 对象和json互相转换方法
2018/03/22 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
飞利浦美国官网:Philips美国
2020/02/28 全球购物
中文系师范生自荐信
2013/10/01 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
试用期辞职信范文
2015/03/02 职场文书
公司人力资源管理制度
2015/08/05 职场文书
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS