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 相关文章推荐
在Django中编写模版节点及注册标签的方法
Jul 20 Python
浅谈Python的异常处理
Jun 19 Python
Python存取XML的常见方法实例分析
Mar 21 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Python logging模块原理解析及应用
Aug 13 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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 日志缩略名的创建函数代码
2010/05/26 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Python os模块学习笔记
2015/06/21 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
关于Python的一些学习总结
2018/05/25 Python
python 爬取疫情数据的源码
2020/02/09 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
keras中的History对象用法
2020/06/19 Python
python palywright库基本使用
2021/01/21 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
物理系毕业生自荐书范文
2014/02/22 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
建筑结构施工求职信
2014/07/11 职场文书
司机岗位职责说明书
2014/07/29 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python