Python中xlrd和xlwt模块使用方法

 

xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。

安装

1
2
pip install xlrd
pip install xlwt

 

xlrd模块使用

excel文档名称为联系人.xls,内容如下:

(1) 打开excel文件并获取所有sheet

1
2
3
4
5
6
7
import xlrd
 
# 打开Excel文件读取数据
data = xlrd.open_workbook('联系人.xls')
 
sheet_name = data.sheet_names()  # 获取所有sheet名称
print(sheet_name) # ['银行2', '银行3']

(2) 根据下标获取sheet名称

1
2
3
# 根据下标获取sheet名称
sheet2_name = data.sheet_names()[1]
print(sheet2_name)  # '银行3'

(3) 根据sheet索引或者名称获取sheet内容,同时获取sheet名称、行数、列数

1
2
3
4
5
6
7
8
9
10
11
12
13
# 根据sheet索引或者名称获取sheet内容,同时获取sheet名称、列数、行数
sheet2 = data.sheet_by_index(1)
print('sheet2名称:{}\nsheet2列数: {}\nsheet2行数: {}'.format(sheet2.name, sheet2.ncols, sheet2.nrows))
# sheet2名称:银行3
# sheet2列数: 7
# sheet2行数: 5
 
sheet1 = data.sheet_by_name('银行2')
print('sheet1名称:{}\nsheet1列数: {}\nsheet1行数: {}'.format(sheet1.name, sheet1.ncols, sheet1.nrows))
 
# sheet1名称:银行2
# sheet1列数: 8
# sheet1行数: 6

 (4) 根据sheet名称获取整行和整列的值

1
2
3
4
5
6
#  根据sheet名称获取整行和整列的值
sheet1 = data.sheet_by_name('银行2')
print(sheet1.row_values(3))  
# ['', '张2', '开发', 'IT编码', 999.0, 133111.0, 41463.0, 'zhang2@164.com'] 日期2013/7/7,实际却显示为浮点数41463.0
print(sheet1.col_values(3)) 
# ['', '工作职责', '', 'IT编码', '网络维修', '']

 (5)获取指定单元格的内容

1
2
3
4
# 获取指定单元格的内容
print(sheet1.cell(1,0).value)  # 第2 行1列内容:机构名称
print(sheet1.cell_value(1,0))  # 第2 行1列内容:机构名称
print(sheet1.row(1)[0].value)  # 第2 行1列内容:机构名称

(6)获取单元格内容的数据类型

1
2
3
4
5
# 获取单元格内容的数据类型
print(sheet1.cell(1,0).ctype)  # 第2 行1列内容 :机构名称为string类型
print(sheet1.cell(3,4).ctype)  # 第4行5列内容:999 为number类型
print(sheet1.cell(3,6).ctype)  # 第4 行7列内容:2013/7/8 为date类型
# 说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

(7)获取单元内容为日期类型的方式

使用xlrd的xldate_as_tuple处理为date格式

1
2
3
4
5
6
7
8
from datetime import datetime,date
 
if sheet1.cell(3,6).ctype == 3 :
    print(sheet1.cell(3, 6).value)  # 41463.0
    date_value = xlrd.xldate_as_tuple(sheet1.cell(3, 6).value, data.datemode)
    print(date_value)  # (2013, 7, 8, 0, 0, 0)
    print(date(*date_value[:3])) # 2013-07-08
    print(date(*date_value[:3]).strftime('%Y/%m/%d'))  # 2013/07/08

(8)获取单元内容为number的方式(转为整型)

1
2
3
4
if sheet1.cell(3, 5).ctype == 2:
    print(sheet1.cell(3, 5).value)  # 133111.0
    num_value = int(sheet1.cell(3, 5).value)
    print(num_value)  # 133111

(9) 获取合并单元格的内容 

需要merged_cells属性
1
2
3
4
5
6
7
8
9
10
11
# 这里,需要在读取文件的时候添加个参数,将formatting_info参数设置为True,默认是False,否
# 则可能调用merged_cells属性获取到的是空值。<br>
data = xlrd.open_workbook('联系人.xls',formatting_info=True)
sheet1 = data.sheet_by_name('银行2')
print(sheet1.merged_cells)  # [(0, 1, 0, 8), (2, 6, 0, 1)]<br>
# merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,
# 不包括row_range,col也是一样,下标从0开始。
#(0, 1, 0, 8) 表示1列-8列合并 (2, 6, 0, 1)表示3行-6行合并<br>
# 分别获取合并2个单元格的内容:
print(sheet1.cell(0,0).value)  # 银行2
print(sheet1.cell_value(2, 0))  # 银行2
规律 : 获取merge_cells返回的row和col低位的索引即可!

使用以下方法更加方便

1
2
3
4
5
6
7
8
9
merge_value = []
for (row,row_range,col,col_range) in sheet1.merged_cells:
    merge_value.append((row,col))
 
print(merge_value)  # [(0, 0), (2, 0)]
for v in merge_value:
    print(sheet1.cell(v[0], v[1]).value)
# 银行2
# 银行2

  

xlwt模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import xlwt
from datetime import datetime,date
 
def set_style(name, height, bold=False, format_str=''):
    style = xlwt.XFStyle()  # 初始化样式
 
    font = xlwt.Font()  # 为样式创建字体
    font.name = name  # 'Times New Roman'
    font.bold = bold
    font.height = height
 
    borders= xlwt.Borders() # 为样式创建边框
    borders.left= 6
    borders.right= 6
    borders.top= 6
    borders.bottom= 6
 
    style.font = font
    style.borders = borders
    style.num_format_str= format_str
 
    return style
 
wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet') # 增加sheet
ws.col(0).width = 200*30 # 设置第一列列宽
 
ws.write(0, 0, 1234.56,set_style('Times New Roman',220,bold=True,format_str='#,##0.00'))
ws.write(1, 0, datetime.now(), set_style('Times New Roman',220,bold=False, format_str='DD-MM-YYYY'))
styleOK = xlwt.easyxf('pattern: fore_colour light_blue;'
 
                          'font: colour green, bold True;')
 
pattern = xlwt.Pattern()#一个实例化的样式类
 
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的样式
 
pattern.pattern_fore_colour = xlwt.Style.colour_map['red']#背景颜色
 
styleOK.pattern = pattern
ws.write(2, 0, 1,style=styleOK)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))
 
wb.save('example.xls')   # 保存xls

 

联系人表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import xlwt
from datetime import datetime, date
 
 
def set_style(name, height, bold=False, format_str='',align='center'):
    style = xlwt.XFStyle()  # 初始化样式
 
    font = xlwt.Font()  # 为样式创建字体
    font.name = name  # 'Times New Roman'
    font.bold = bold
    font.height = height
 
    borders = xlwt.Borders()  # 为样式创建边框
    borders.left = 2
    borders.right = 2
    borders.top = 0
    borders.bottom = 2
 
    alignment = xlwt.Alignment()  # 设置排列
    if align== 'center':
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
    else:
        alignment.horz = xlwt.Alignment.HORZ_LEFT
        alignment.vert = xlwt.Alignment.VERT_BOTTOM
 
    style.font = font
    style.borders = borders
    style.num_format_str = format_str
    style.alignment = alignment
 
    return style
 
 
wb = xlwt.Workbook()
ws = wb.add_sheet('联系人',cell_overwrite_ok=True# 增加sheet
rows = ['机构名称', '姓名', '部门', '电话', '入职日期', '手机', '邮箱']
col1 = ['王1', '王2', '王3']
col2 = ['666', '777','888']
col3 = ['2014-08-09','2014-08-11','2015-08-09']
# 写第一行数据
ws.write_merge(
    0,
    0,
    0,
    6,
    '联系人表',
    set_style(
        'Times New Roman',
        320,
        bold=True,
        format_str=''))  # 合并单元格
 
styleOK = xlwt.easyxf()
 
pattern = xlwt.Pattern()  # 一个实例化的样式类
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 固定的样式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'# 背景颜色
 
borders = xlwt.Borders()  # 为样式创建边框
borders.left = 2
borders.right = 2
borders.top = 6
borders.bottom = 2
 
font = xlwt.Font()  # 为样式创建字体
font.name = 'Times New Roman'
font.bold = True
font.height = 220
 
styleOK.pattern = pattern
styleOK.borders = borders
styleOK.font = font
 
# 写第二行数据
for index, val in enumerate(rows):
    ws.col(index).width = 150 * 30 # 定义列宽
    ws.write(1, index, val, style=styleOK)
 
# 写第3行-6行第一列数据
ws.write_merge(
    2,
    2 + len(col1)-1,
    0,
    0,
    'x机构',
    set_style(
        'Times New Roman',
        320,
        bold=True,
        format_str=''))  # 合并单元格
 
# 从第3行开始写1列数据
for index, val in enumerate(col1):
    ws.col(1).width = 150 * 30 # 定义列宽
    ws.write(index+2, 1, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
 
# 从第3行开始写4列数据
for index, val in enumerate(col2):
    ws.col(3).width = 150 * 30 # 定义列宽
    ws.write(index+2, 3, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
 
 
# 从第3行开始写5列数据
for index, val in enumerate(col3):
    ws.col(4).width = 150 * 30 # 定义列宽
    ws.write(index+2, 4, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
 
ws.write(4, 2,'技术部', style=styleOK)
ws.write(4, 5,'186777233', style=styleOK)
ws.write(4, 6,'wang@166.com', style=styleOK)
wb.save('test.xls')   # 保存xls

  

 

 

 

python操作excel xlwt (转)的更多相关文章

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

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

  2. Python操作excel(xlrd和xlwt)

    Python操作excel表格有很多支持的库,例如:xlrd.xlwt.openpyxl.win32com,下面介绍使用xlrd.xlwt和xlutils模块这三个库不需要其他的支持,在任何操作系统上 ...

  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 xlrd和xlwt的使用

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

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

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

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

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

  8. Python操作Excel

    一.系统性学习 对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址: python操作Excel读写--使用xlrd 官方文档 Python 使用 Xlrd/xlwt 操 ...

  9. Python操作excel表格

    用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...

随机推荐

  1. 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记

    第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...

  2. 学习 | css3实现进度条加载

    进度条加载是页面加载时的一种交互效果,这样做的目的是提高用户体验. 进度条的的实现分为3大部分:1.页面布局,2.进度条动效,3.何时进度条增加. 文件目录 加载文件顺序 <link rel=& ...

  3. URL及日期等特殊数据格式处理-JSON框架Jackson精解第2篇

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  4. python爬取花木兰豆瓣影评,并进行词云分析

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  5. python中yield的用法详解——最简单,最清晰的解释(转载)

    原文链接 首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的, ...

  6. 机器学习-线性规划(LP)

    线性规划问题 首先引入如下的问题: 假设食物的各种营养成分.价格如下表: Food Energy(能量) Protein(蛋白质) Calcium(钙) Price Oatmeal(燕麦) 110 4 ...

  7. 单调队列优化O(N)建BST P1377 [TJOI2011]树的序

    洛谷 P1377 [TJOI2011]树的序 (单调队列优化建BST 链接 题意分析 本题思路很简单,根据题意,我们利用所给的Bst生成序将Bst建立起来,然后输出该BST的先序遍历即可: 但,如果我 ...

  8. 坐标下降(Coordinate descent)

    坐标下降法属于一种非梯度优化的方法,它在每步迭代中沿一个坐标的方向进行线性搜索(线性搜索是不需要求导数的),通过循环使用不同的坐标方法来达到目标函数的局部极小值.

  9. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  10. C++派生类与基类的关系

    派生类与基类有这些关系: 1.公有派生类从基类继承所有成员和成员函数 2.公有派生类无法直接访问从基类继承的私有成员,但可以通过继承的公共接口访问. 3.公有派生类无法继承基类的友元函数. 4.基类先 ...