• 时间: 2020-08-18 整理: qiyuan

安装和导入

1.模块介绍

在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls、xlsx文件)进行读写等操作. 本篇以 python3 为基础,以 xlrd/xlwt 模块为“学习和研究”对象,对 xlrd/xlwt 中常见的用法进行梳理和记录.

2.模块安装

pip install xlrd
pip install xlwt

3.模块导入

import xlrd
import xlwt

xlrd模块

1.语法说明

import xlrd  # 导入xlrd模块

1.打开excel文件,获取文件内容
excel = '/Users/usr/Downloads/TEMP/DVT.xlsx'
data = xlrd.open_workbook(excel)
data.nsheets # 获取该excel文件中包含的sheet的数量
data.sheets() # 返回该excel文件中所有sheet对象组成的列表
data.sheet_names() # 返回该excel文件中所有sheet名称组成的列表
data.sheet_names()[index] # 获取excel文件中指定索引的sheet的名称
data.sheet_loaded(sheet_name or index) # 检查某个sheet是否导入完毕 2.获取某个sheet数据
table = data.sheets()[index] # 根据sheet索引获取sheet内容
table = data.sheet_by_index(index) # 根据sheet索引获取sheet内容
table = data.sheet_by_name(sheet_name) # 根据sheet名称获取sheet内容
table.name # 获取sheet名称 3.操作行、列、单元格
# 行的操作
table.nrows # 获取该sheet中的有效行数
table.row(rowx) # 返回由该行中所有单元格对象组成的列表
table.row_slice(rowx) # 返回由该列中所有的单元格对象组成的列表
table.row_types(rowx,start_colx=0,end_colx=None) # 返回由该行中所有单元格的数据类型组成的列表
table.row_values(rowx,start_colx=0, end_colx=None) # 返回由该行中所有单元格数据组成的列表
table.row_len(rowx) # 返回该列的有效单元格长度 # 列的操作
table.ncols # 获取该sheet中的有效列数
table.col(colx,start_rowx=0,end_rowx=None)
table.col_slice(colx,start_rowx=0,end_rowx=None)
table.col_types(colx,start_rowx=0,end_rows=None)
table.col_values(colx,start_rowx=0,end_rows=None) # 单元格的操作
table.cell(rowx,colx) # 返回单元格对象
table.cell_value(rowx,colx) # 返回单元格中的数据
table.cell(rowx,colx).value
table.row(rowx)[index].value
table.col(colx)[index].value
table.cell_type(rowx,colx) # 返回单元格中的数据类型
sheet2.cell(rowx,colx).ctype
table.row(rowx)[index].ctype
table.col(colx)[index].ctype 4.获取单元格内容为特定类型方式
# ctype: 0 empty,1 string,2 number,3 date,4 boolean,5 error,6 blank
# 获取单元格内容为date格式
from datetime import datetime,date
if sheet1.cell(3,6).ctype == 3:
cell_value = sheet1.cell(3,6).value)
date_value = xlrd.xldate_as_tuple(cell_value, data.datemode)
date_value_str = date(*data_value[:3])
date_value_str = date(*data_value[:3]).strftime('%Y/%m/%d')
# 获取单元格内容为number(int)格式
if sheet1.cell(3,5).ctype == 2:
cell_value = sheet1.cell(3,5).value
num_value = int(cell_value) 5.获取合并单元格的内容
data = xlrd.open_workbook(filename, formattinng_info=True)
sheet1 = data.sheet_by_name('OTA_02')
sheet1.merged_cells
# 返回: (row,row_range,col,col_range)
# 总结规律: 获取merge_cells返回的row和col的低位索引即可
merge_value = []
for (row,row_range,col,col_range) in sheet1.merged_cells:
merge_value.append((row,col))
print(merge_value)
for v in merge_value:
cell_value = sheet1.cell(v[0],v[1]).value
print(cell_value) 6.打开包含中文字符的文件名和sheet名时报错的解决办法
# 1.使用open()函数,xlrd.open_workbook()函数打开文件,文件名若包含中文,会报错找不到这个文件或目录
# 2.获取sheet时,若包含中文,也会报错
file = open(filename,'rb') # 打开文件
workbook = xlrd.open_workbook(filename) # 打开excel文件
sheet = workbook.sheet_by_name(sheetname) # 获取sheet
# 解决方案:
# a.对参数进行转码即可,如:
filename = filename.decode('utf-8')
# b.也试过unicode函数,不过,在ride中运行时出现了报错,不推荐
filename = unicode(filename,'utf-8')

2.示例

BOOK_LIST.xlsx : Sheet1

使用 xlrd 模块读取表格内容:

# -*- coding: utf-8 -*-
import xlrd
from datetime import datetime, date def read_excel():
data = xlrd.open_workbook(r'/media/psf/Home/Downloads/TEMP/BOOK_LIST.xlsx')
print('Sheet列表:', data.sheet_names(), '数量:', data.nsheets)
table = data.sheets()[0]
# table = data.sheet_by_index(0)
# table = data.sheet_by_name('Sheet1') print('Sheet名称:', table.name, '行数:', table.nrows, '列数:', table.ncols) print('-------- 按行显示Sheet内容: --------')
for rowx in range(0, table.nrows):
print('第{}行:'.format(rowx + 1), table.row_values(rowx))
# print('第{}行:'.format(rowx + 1), table.row_types(rowx)) print('-------- 按列显示Sheet内容: --------')
for colx in range(0, table.ncols):
print('第{}列:'.format(colx + 1), table.col_values(colx))
# print('第{}列:'.format(colx + 1), table.col_types(colx)) print('-------- 按行显示Sheet所有单元格对象: --------')
for rowx in range(0, table.nrows):
print('第{}行:'.format(rowx + 1), table.row(rowx)) print('-------- 按列显示Sheet所有单元格对象: --------')
for colx in range(0, table.ncols):
print('第{}列:'.format(colx + 1), table.col(colx)) print('-------- 获取合并单元格内容: --------')
# 获取合并单元格内容
print('合并单元格的索引和范围:', table.merged_cells)
for (rowx,row_range,colx,col_range) in table.merged_cells:
print('合并单元格的内容:',table.cell(rowx,colx).value,'(','合并单元格宽:',col_range,'高:',row_range,')') print('-------- 获取/转换单元格内容为特定类型: --------')
# 获取单元格内容为int类型
print('转换前:', table.col(0,1,None))
print('转换后', end=': ')
for cellobj in table.col(0,1,None):
if cellobj.ctype == 2:
cell_value = cellobj.value
num_value = int(cell_value)
print(num_value, end=', ')
else:
print(cellobj.value, end=', ') print('') # 获取单元格内容为date格式
print('转换前:', table.col(6,1,None))
print('转换后', end=': ')
for cellobj in table.col(6,1,None):
if cellobj.ctype == 3:
cell_value = cellobj.value
date_value = xlrd.xldate_as_tuple(cell_value, data.datemode)
data_value_obj = date(*date_value[:3])
data_value_str = date(*date_value[:3]).strftime('%Y/%m/%d')
print(data_value_str,end=', ')
else:
print(cellobj.value, end=', ') if __name__ == '__main__':
read_excel()

运行结果:

(提示: 如果图片不清晰影响阅读,可鼠标右键点击图片选择 ‘在新标签页中打开图片’ 查看高清大图,或选择 ‘图片存储为...’ 到本地查看)

xlwt模块

1.语法说明

import xlwt  # 导入模块

1.创建Workbook对象
wb = xlwt.Workbook() 2.新增sheet
ws = wb.add_sheet('sheet')
ws = wb.add_sheet('联系人', cell_overwrite_ok=True) 3.写入数据
ws.write(0,0,'Hello')
ws.write(2,0,100)
ws.write(2,1,200)
ws.write(2,2,xlwt.Formula("A3+B3"))
ws.write(4,2,'技术部')
ws.write(4,5,'186777233')
ws.write(4,6,'wangwu@163.com')
ws.write_merge(21,21,0,1,u'Summary') # 合并单元格 4.设定单元格样式、列宽
ws.col(0).width = 200*30 5.保存工作薄
wb.save('/Users/usr/Downloads/TEMP/example.xls')

2.示例

BOOK_LIST.xlsx : Sheet2

使用 xlwt 模块创建新的表格并写入数据:

# -*- coding: utf-8 -*-
import xlwt
from datetime import datetime,date def set_style(name,height,bold=False):
style = xlwt,XFStyle() font = xlwt.Font()
font.name = name
font.blod = blod
font.color_index = 4
font.height = height # borders = xlwt.Borders()
# borsers.left = 6
# borders.right = 6
# borders.top = 6
# borders.bottom = 6 style.font = font
# style.borders = borders return style def write_excel():
f = xlwt.Workbook() sheet1 = f.add_sheet(u'sheet1',cell_voerwrite_ok=True)
row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
columnn0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
status = [u'预订',u'出票',u'退票',u'业务小计'] for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman', 220, True)) i,j = 1,0
while i < 4*len(column0) and j < len(column0):
sheet1.write_merge(i,i+3,0,0,column[j],set_style('Arial',220,True))
sheet1.write_merge(i,i+3,7,7)
i += 4
j += 1
sheet1.write_merage(21,21,0,1,u'合计',set_style('Times New Roman',220,True)) i = 0
while i < 4*len(column0):
for j in range(0,len(status)):
sheet1.write(j+i+1,1,status[j])
i += 4 f.save('demo1.xlsx') if __name__ == '__main__':
write_excel()

--the end--

Python如何读写Excel文件-使用xlrd/xlwt模块的更多相关文章

  1. Python使用读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  2. python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  3. python读写Excel文件(xlrd、xlwr)

    一.首先需要安装第三方库:pip install xlrd 1.打开Excel文件,由于写入时需要copy,所以这里加上保留原格式参数:formatting_info=True excel_file ...

  4. 用Python读写Excel文件(转)

    原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...

  5. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  6. 用Python读写Excel文件的方式比较

    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...

  7. python读写Excel文件的函数--使用xlrd/xlwt

    python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket  The ...

  8. python xlrd,xlwt 读写excel文件

    python 读excel文件,需要xlrd库.下载地址:https://pypi.python.org/pypi/xlrd python 写excel文件,需要xlwt库.下载地址:https:// ...

  9. python使用xlrd模块读写Excel文件的方法

    本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...

随机推荐

  1. 使用bind部署DNS主从服务器

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建主从DNS服务器的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要查看相关软件版 ...

  2. CentOS7安装桌面环境以及中文语言支持

    CentOS7 操作系统 http://public-yum.oracle.com/oracle-linux-isos.html ================================= 1 ...

  3. 1.4matlab矩阵的表示

    1.4matlab矩阵的表示 矩阵的建立 利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔. 利用已建立好的矩 ...

  4. videojs文档翻译-Player(v6.0.0-RC.2)

    Player 当使用任何Video.js设置方法初始化视频时,将创建Player类的实例. 创建实例后,可以通过两种方式在全局访问: 调用videojs('example_video_1');直接通过 ...

  5. 学会这十招,轻松搜索github优质项目

    大家好,我是青空. 今天我想给大家分享一下使用 GitHub 的一些心得体会.之前我是在分享 GitHub上的一些开源项目,通过这段时间的收集工作,我积累了一些相关的经验在这里分享给大家. 我做了一个 ...

  6. Netty入门(一):ByteBuf

    网络数据的基本单位总是字节.Java NIO 提供了 ByteBuffer 作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐.Netty 的 ByteBuffer 替代品是 ByteBuf ...

  7. 如何开启MySQL远程连接

    MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问,这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说 ...

  8. POJ 1190 生日蛋糕题解

    题目地址:http://poj.org/problem?id=1190 一道很有趣的搜索题--主要是剪枝-- 我弄了5个剪枝: 1.当前剩余层数>=上层半径,剪掉 2.当前剩余层数>=上层 ...

  9. 靶机Cyberry

    工具 hydra.crunch.dirbuster 涉及到的点 Port knocking(端口试探) Brainfuck编码 ftp爆破 ssh爆破 openssl enc加密 命令执行漏洞 Lin ...

  10. OEM 刷新配置方法

    一:设置>添加目标>配置自动搜索 二:主机上的目标>针对所选的主机 三:禁用调度 四:设置>添加目标>自动搜索结果 五:主机上的目标,搜索结果 六:删除 七:选择机器数据 ...