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使用Matplotlib实现Logos设计代码
Dec 25 Python
python删除某个字符
Mar 19 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Django实现网页分页功能
Oct 31 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
Python排序函数的使用方法详解
Dec 11 Python
python中re模块知识点总结
Jan 17 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
短波收音机简介
2021/03/01 无线电
在数据量大(超过10万)的情况下
2007/01/15 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
javascript 多级checkbox选择效果
2009/08/20 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
简单谈谈python中的多进程
2016/11/06 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python Django 创建应用过程图示详解
2019/07/29 Python
python字符串判断密码强弱
2020/03/18 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
python实现发送邮件
2021/03/02 Python
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
2014年元旦感言
2014/03/06 职场文书
党员演讲稿
2014/09/04 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
女性健康讲座主持词
2015/07/04 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技