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安装教程 Pycharm安装详细教程
May 02 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
浅析Python数据处理
May 02 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python之时间和日期使用小结
Feb 14 Python
基于django传递数据到后端的例子
Aug 16 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
python numpy数组复制使用实例解析
Jan 10 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
python和php哪个更适合写爬虫
Jun 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
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
django实现用户注册实例讲解
2019/10/30 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
总裁秘书岗位职责
2013/12/04 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
分层教学实施方案
2014/03/19 职场文书
企业安全生产责任书
2014/04/14 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏