一、xlrd和xlwt模块介绍
xlrd模块提供在任何平台上从excel电子表格(.xls和.xlsx)中提取数据的功能,xlwt模块提供生成与Microsoft Excel 95 到2003版本兼容的excel文件的功能。
1、安装方法
# 方法一: pip3 install xlrd pip3 install xlwt # 方法二: 在python官网http://pypi.python.org/pypi/xlrd/(xlwt)下载xlrd/xlwt的安装包。 压缩包放置在python安装目录下python/Lib/site-packages。 解压压缩包:tar zxvf xlrd-1.0.0.tar.gz 进入到解压的文件夹:cd xlrd-1.0.0 执行命令:python setup,py install
2、xlrd使用详解
(1)excel文档准备
准备excel文档:联系人.xls,内容如下所示:
(2)xlrd获取sheet工作表名称和对象
import xlrd # 打开Excel文件读取器,加上utf-8编码可防止遇到中文字符乱码 data = xlrd.open_workbook('联系人.xls', encoding_override='utf-8') # 获取所有sheet工作表名称 sheetnames = data.sheet_names() print(sheetnames) """ ['银行1', '银行2'] """ # 通过索引获取指定sheet工作表名称 sheet_name = data.sheet_names()[1] print(sheet_name) """ 银行2 """ # 通过工作表名称获取sheet对象 table_name = data.sheet_by_name(sheet_name) print(table_name) """ <xlrd.sheet.Sheet object at 0x10b657160> """ # 通过sheet索引获取sheet工作表对象 table_index = data.sheet_by_index(0) print(table_index) """ <xlrd.sheet.Sheet object at 0x1073b3f28> """
(3)sheet工作表行/列操作
# 获取行数和列数 nrows = table_name.nrows # 总行数 ncols = table_name.ncols # 总列数 print("银行2表,总行数: %s,总列数: %s" % (nrows, ncols)) """ 银行2表,总行数: 5,总列数: 7 """ # 根据sheet对象获取整行和整列的值 sheet_row_val = table_name.row_values(3) sheet_col_val = table_name.col_values(3) print("整行的值:%s , \n整列的值: %s" % (sheet_row_val, sheet_col_val)) """ 整行的值:['', '李九', '开发', 'IOS开发', 87888.0, 13213123.0, 'wang1@164.com'] , 整列的值: ['', '工作职责', 'UI设计', 'IOS开发', '硬件维护'] """ # 获取当前行的有效单元格长度 print(table_name.row_len(3)) print(table_index.row_len(3)) """ 7 8 """
(4)sheet工作表单元格操作
单元格是组成表格的最小单位,可以拆分或合并。每个数据的输入和修改都是在单元格中进行的。
# 获取指定单元格内容 print(table_name.cell(1,0).value) # 第二行第一列 print(table_name.cell_value(2,1)) # 第三行第二列 print(table_name.row(1)[0].value) # 第二行第一列 """ 机构名称 张八 机构名称 """ # 获取单元格内容的数据类型 # ctype说明:0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error print(table_index.cell(1,0).ctype) # 银行1表,2行1列内容 机构名称 print(table_index.cell(3,4).ctype) # 银行1表,4行5列内容 888 print(table_index.cell(2,6).ctype) # 银行1表,3行7列内容 2019/5/7 """ 1 2 3 """ # 日期单元格内容处理 from datetime import datetime, date if table_index.cell(2,6).ctype == 3: print(table_index.cell(2, 6).value) date_value = xlrd.xldate_as_tuple(table_index.cell(2, 6).value, data.datemode) print(date_value) print(date(*date_value[:3])) print(date(*date_value[:3]).strftime('%Y/%m/%d')) """ 43592.0 (2019, 5, 7, 0, 0, 0) 2019-05-07 2019/05/07 """ # 获取number类型的单元格内容 if table_index.cell(3, 4).ctype == 2: print(table_index.cell(3, 4).value) num_value = int(table_index.cell(3, 4).value) # 转为整型 print(num_value) """ 888.0 888 """
(5)获取合并单元格内容
需要使用merged_cells属性,获取merged_cells返回的row和col低位的索引即可。
# 需要在读取文件时添加formatting_info参数,默认是False # 需要设置为True,才能调用merged_cells属性获取到值 xls_data = xlrd.open_workbook('