用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件

注:本篇代码在Python3环境下运行

首先导入两个模块xlrd和xlwt,xlrd用来读取Excel表格,xlwt是写Excel表格

在命令提示行输入命令:

  pip install xlrd

  pip install xlwt

下面我们学习一下这两个模块的使用

一、xlrd

1.首先导入模块,import xlrd

2.先写一个表用来实验,表的内容是这样的:

import xlrd

file_path = '1.xlsx'

xlrd.Book.encoding = "utf8" #设置编码
data = xlrd.open_workbook(file_path)#打开文件
sheet_names = data.sheet_names() #查看文件中包含sheet的名称

获取工作簿,有三种方式

# table = data.sheets()[0]
# table = data.sheet_by_name('Sheet1')
table = data.sheet_by_index(0) #取第一张工作簿(三种方法)

获取总行数和总列数

rows_count = table.nrows #取总行数
cols_count = table.ncols#取总列数

获取第一行及第一列数据

row_data = table.row_values(0)#获取第一行数据(数组)
col_data = table.col_values(0)#获取第一列数据(数组)

获取某个单元格的值

cell_data = row_data[0]  #取第0行第0列的值   战士
cell_data_A1 = table.cell(1, 1).value #取第1行第1列的值 李白

循环读取所有数据

for row in range(0,rows_count):
for col in range(0,cols_count):
data1 = table.cell(row,col).value
print(data1,end=' ')
print('\n')

这是基本操作,下面扩展一点

关于时间格式:

  看一下取时间那一列数据,得到的什么

['时间', 42993.0, '2017.01.12', 40900.0]

这并不是我们想要的,这个时间格式是Excel中,以1900年1月1日为起始时间,以天为单位的得到的数据

其实在这个模块中,有个属性可以显示单元格数据的类型,ctype,有这几种类型:

  ctype = 1 # 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

我们可以查看一下,它打印的这个是什么类型

print(table.cell(1,6).ctype)#
print(table.cell(2,6).ctype)#
print(table.cell(3,6).ctype)#

原来他能识别这是时间格式,那我们要处理一下了,让他显示格式化时间

可以用这条命令来转换一下

date_value = xlrd.xldate_as_tuple(table.cell_value(1,6),data.datemode)

print(date_value)#(2017, 9, 15, 0, 0, 0)

这个格式就可以用了

from datetime import date,datetime

print(date(*date_value[:3]))#2017-09-15  

print(date(*date_value[:3]).strftime('%Y/%m/%d'))#2017/09/15

所以当我们循环读取并打印数据的时候,可以做一个判断,如果数据的ctype为3,就做这样一个转换

for row in range(0,rows_count):
for col in range(0,cols_count):
if (table.cell(row, col).ctype == 3):#如果读到时间格式的数据,就转换
data_value = xlrd.xldate_as_tuple(table.cell_value(row, col), data.datemode)
data1 = date(*data_value[:3]).strftime('%Y/%m/%d')
else:
data1 = table.cell(row,col).value
print(data1,end=' ')
print('\n')
战士 刺客 法师 坦克 辅助 射手 时间 

老夫子 李白 甄姬 亚瑟 蔡文姬 鲁班 2017/09/15 

杨戬 韩信 小乔 牛魔 大乔 狄仁杰 2017.01.12 

典韦 赵云 妲己 钟无艳 孙斌 虞姬 2011/12/23 

其实,xlrd也能实现简单的修改数据,但是这只是临时的修改,好像并没有什么用

#简单的写入数据
row = 1
col = 0
ctype = 1 # 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
value = ''
xf = 0 # 扩展的格式化 (默认是0)
table.put_cell_unragged(row, col, ctype, value, xf)
table.put_cell(row, col, ctype, value, xf)#只是暂时的修改,而且只能是修改已有的数据

然后再读取数据:

for row in range(0,rows_count):
for col in range(0,cols_count):
if (table.cell(row, col).ctype == 3):#如果读到时间格式的数据,就转换
data_value = xlrd.xldate_as_tuple(table.cell_value(row, col), data.datemode)
data1 = date(*data_value[:3]).strftime('%Y/%m/%d')
else:
data1 = table.cell(row,col).value
print(data1,end=' ')
print('\n')

拿到的结果就是修改了的,但是这只是临时的,原表格并没有修改

战士 刺客 法师 坦克 辅助 射手 时间 

1212 李白 甄姬 亚瑟 蔡文姬 鲁班 2017/09/15 

杨戬 韩信 小乔 牛魔 大乔 狄仁杰 2017.01.12 

典韦 赵云 妲己 钟无艳 孙斌 虞姬 2011/12/23 

关于合并的单元格的读取

默认读取合并的单元格的时候,只会在合并单元格出现的第一个位置有值,其他合并的位置 就是空了,我们可以拿到合并的单元格所在表中的位置

用一张新表,内容如下

workbook = xlrd.open_workbook('2.xlsx')
table2 = workbook.sheet_by_index(0)
print(table2.merged_cells)#[(3, 5, 3, 4), (3, 5, 0, 1)] 读取表中有合并单元格的位置
#merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)
# 即(3, 5, 3, 4)的含义是:第3到4列(3,4)的第4到5行(3,5)合并,(3, 5, 0, 1)的含义是:第0到1列(0,1)的第4到5行(3,5)合并。
 

  

二、xlwt

1.导入模块 import xlwt

2.创建工作簿,工作表

myWorkbook = xlwt.Workbook()#创建一个工作簿
mySheet = myWorkbook.add_sheet('A Test Sheet')#创建一个工作表

3.创建数据格式,写入数据

myStyle = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00')#数据格式
mySheet.write(3, 0,'abcd', myStyle)#写数据的时候可以用这个格式,也可以不用
mySheet.write(2, 0, 1)#写入A3,数值等于1
mySheet.write(2, 1, 1)#写入B3,数值等于1
mySheet.write(2, 2, xlwt.Formula("A3+B3"))#写入C3,数值等于2

4.保存

myWorkbook.save('test.xls')#保存

Python操作excel表格的更多相关文章

  1. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  2. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

  3. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  4. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  5. python - 操作excel表格

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  6. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

  7. python操作excel表格(xlrd/xlwt)

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  8. Python操作Excel表格,xlwt模块的使用

    Python可以操作Excel的模块不止一种,我习惯使用的写入模块是xlwt(一般都是读写模块分开的) 按照模块使用pip install xlwt 就行了,很常规的方式 直接进代码解析,本文源码 w ...

  9. 28.python操作excel表格(xlrd/xlwt)

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

随机推荐

  1. 慕课网视频破解付费分享-前端开发-Python等

    微信小程序 慕课网   BAT大牛经验总结全面深入解读Android面试   前端JS基础面试技巧   vue2.0+node.js+mongodb全栈打造商城   Vue.js高级实战-开发移动端音 ...

  2. 改变input光标颜色与输入字体颜色不同

    设置input css: color #ffd600text-shadow 0px 0px 0px #bababa -webkit-text-fill-color initial input, tex ...

  3. chrome开发工具指南(九)

    检查和管理存储.数据库与缓存 查看和修改本地存储与会话存储. 检查和修改 IndexedDB 数据库. 对 Web SQL 数据库执行语句. 查看应用缓存和服务工作线程缓存. 点击一次按钮即可清除所有 ...

  4. MySQL(十)之视图

    前言 前面给大家介绍了查询语句,感觉写的还不错的,喜欢的可以去查看.今天给大家分享的是MySQL中的视图. 视图(View):视图是由查询结果形成一张虚拟的表.非临时表,只要不删除的话就会一直存放在磁 ...

  5. 非对话框程序创建组合框Groupbox

    对话框程序中的控件,例如button.groupbox之类,是直接放上去的.当然,除groupbox以外,在MFC中其他控件都有相对应的类,以支持程序员在非对话框程序中动态创建控件.而唯独好像没有gr ...

  6. 软工+C(2017第2期) 分数和checklist

    // 上一篇:题目设计.点评和评分 // 下一篇:超链接 教学里,建立清晰明确的评分规则并且一开始就公布,对于教师.助教.学生都是重要的. 公布时机 在课程开始的时候,就需要确定并公布评分机制,随着课 ...

  7. 201521123082 《Java程序设计》第7周学习总结

    201521123082 <Java程序设计>第7周学习总结 标签(空格分隔): Java 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ...

  8. 201521123073 《Java程序设计》第11周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问, ...

  9. 201521123112《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 线程终止可以使用boolean标志使线程中的run()方法退出. 线程让步使用Thead.yield(). 等待其 ...

  10. 201521123052 《Java程序设计》 第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...