excel工作表在日常工作中必不可少,哪怎么使用Python读取excel表呢?
python读excel——xlrd
其中读取日期和合并单元格稍微麻烦,话不多说,直接上代码:
[Python] 纯文本查看 复制代码 import xlrd
from datetime import date
def read_excel():
"""读取excel"""
# 打开文件
work_book = xlrd.open_workbook('read_test.xlsx')
# 获取所有sheet
sheet_names = work_book.sheet_names()
# 根据sheet索引或者名称获取sheet内容
for index, sheet_name in enumerate(sheet_names):
# 根据名字
sheet = work_book.sheet_by_name(sheet_name)
# 根据索引
sheet = work_book.sheet_by_index(index)
# 获取sheet的名称,行数,列数
name = sheet.name # 名称
nrows = sheet.nrows # 行数
ncols = sheet.ncols # 列数
print(name, nrows, ncols)
# 获取整行或整列数据
# for i in range(nrows):
# nrow_data = sheet.row_values(i)
# print(nrow_data)
#
# for i in range(ncols):
# ncols_data = sheet.col_values(i)
# print(ncols_data)
# 获取指定单元格的内容
data = sheet.cell(0, 1).value
data = sheet.cell_value(0, 1)
data = sheet.row(0)[1].value
data = sheet.col(1)[0].value
print(data)
# 获取指定单元格的数据类型
# 说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
data_type = sheet.cell(0, 1).ctype # 值为1 表示string
print(data_type)
# 获取日期类型的数据
data_date = sheet.cell(2, 0).ctype
print(data_date)
if sheet.cell(1, 0).ctype == 3:
date_value = xlrd.xldate_as_tuple(sheet.cell_value(1, 0), work_book.datemode)
print(date_value)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d') # 处理为日期格式
print(date_tmp)
# 读取合并单元格的内容 第二行 第十列和第十一列是合并单元格
data_merge10 = sheet.cell_value(1, 9) # 第十列 获取到值
data_merge11 = sheet.cell_value(1, 10) # 第十一列 没有值
print(data_merge10, data_merge11)
# 从以上结果可以看出来,第2行的第10和第11列是合并单元格,但这里我们只获取到第2行第10列的值而第11列获取的内容为空,理论上来说合并的单元格内容应该是一样的,但是现在只有合并的第一个单元格可以获取到值,其他为空,如何处理?
print(sheet.merged_cells)
# merged_cells属性是返回sheet的所有合并的单元格,[(1, 2, 9, 11), (1, 3, 11, 12)],列表中的每一个元素表示合并的单元格,
# 每一个元组有4个元素,前两个表示单元格占的行数(含前不含后),后两个参数表示占的列数(含前不含后) 注意:行列下标从0开始
# (1, 2, 9, 11) 表示 第2行 的 第10列、11列为合并的单元格
# (1, 3, 11, 12) 表示 第12列 的 第2、第3行表示合并单元格
# 获取所有合并的单元格
merge = []
for (rlow, rhigh, clow, chigh) in sheet.merged_cells:
merge.append((rlow, clow))
for i in merge:
print(sheet.cell_value(i[0], i[1]))
if __name__ == '__main__':
read_excel()
|