版权声明:原创博客,不得用于商业用途 https://blog.csdn.net/qq_43471020/article/details/84063887
需求:现有一个excel表格,读取date列的内容和合并单元格的内容
Sheet1页的数据内容如下:
代码如下:
import xlrd
import collections
import json
import operator
from ctypes import *
from datetime import date,datetime
excel_file = xlrd.open_workbook('C:\\Users\\belle.zhao\\Desktop\\test.xlsx','rb') # 打开excel文件
print(excel_file.sheet_names()) # 获取Excel的sheet表
sheet = excel_file.sheet_by_name('Sheet1') # 选择sheet页sheet1
sheet1 = excel_file.sheet_by_index(1) #选择第2个sheet页的表
title = sheet.row_values(0) #获取sheet页的标题
ncols = sheet.ncols # 获取sheet1 页的列数
nrows = sheet.nrows # 获取sheet1页的行数
data_list = []
for i in range(1,nrows):
data_values = collections.OrderedDict()
row_value = sheet.row_values(i)
for j in range(0,len(row_value)-1):
data_values[title[j]] = row_value[j]
print([title[j]],row_value[j])
data_list.append(data_values)
row_result = json.dumps(data_list)
print("len(row_value)-1列的所有行的值是:", row_result)
cell_value=sheet.cell_value(1,1) # 获取第2行第2列的值
cell_value2=sheet.cell(1,1) # 获取第2行第2列的数据类型和值
cell_value3=sheet.row(1)[1] # 获取第2行第2列的值
print("cell_value的值是:", cell_value)
print("cell_value2的值是:",cell_value2)
print("cell_value3的值是:",cell_value3)
# 读取excel中日期类型的数据
# 将第4行第4列的数据转化为日期格式:
cell_value_type=sheet.cell_type(3,3) # 获取第4行第4列的数据类型,表格中是日期类型
if cell_value_type == 3:
date_value = xlrd.xldate_as_tuple(sheet.cell_value(3,3), excel_file.datemode)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
print("date_value的值是",date_tmp)
# 第4列的日期数据转化为日期格式输出:
col_date=[]
for m in range(1,nrows):
col_date_value = xlrd.xldate_as_tuple(sheet.cell_value(m,3), excel_file.datemode)
col_date.append(col_date_value[0:3]) # 获取日期列的内容,不要时分秒
print("日期列的内容是:", col_date)
# 利用datetime获取datetime对象类型
col_datetime = []
for n in range(1, nrows):
col_date_value2 = xlrd.xldate_as_datetime(sheet.cell(n,3).value, 0)
col_datetime.append(col_date_value2) # 获取日期列的内容,格式为datetime类型
print("日期列的内容col_datetime是:", col_datetime)
# 将datetime 对象类型转化为元组
col_datetime2 = []
for a in range(1, nrows):
col_date_value3 = xlrd.xldate_as_datetime(sheet.cell_value(a,3), 0)
col_datetime2.append(col_date_value3.__str__()) # 获取日期列的内容,日期格式转化为元组
print("日期列的内容col_datetime2是:", col_datetime2) # 将元组转化为字符串
# 读取合并单元格的数据
print("当前sheet页的合并单元格有:", sheet.merged_cells)
print("第3行第5列合并的单元格的数据是:", sheet.cell_value(3,5))
merge_cell = []
for (rlow,rhigh,clow,chigh) in sheet.merged_cells:
merge_cell.append([rlow,clow])
print("获取合并单元格的起始行和起始列:", merge_cell)
print("获取合并单元格的数据类型:", type(merge_cell))
for index in merge_cell:
print("获取合并单元格的值:", sheet.cell_value(index[0],index[1])) # 第0个索引得到的值做为行,第2个索引得到的值做为列,并进行遍历
部分运行结果如下:
日期列的内容是: [(2018, 10, 5), (2018, 10, 5), (2018, 9, 5), (2018, 10, 5), (2018, 9, 5), (2018, 10, 5), (2018, 10, 5), (2018, 9, 5), (2018, 11, 5), (2018, 9, 5), (2018, 9, 5), (2018, 7, 5), (2018, 9, 5), (2018, 9, 5), (2018, 10, 5), (2018, 10, 6), (2018, 9, 5), (2018, 11, 5), (2018, 11, 5), (2018, 11, 5), (2018, 9, 5), (2018, 11, 5), (2018, 11, 5), (2018, 7, 5), (2018, 9, 5), (2018, 7, 5)]
日期列的内容col_datetime是: [datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 7, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 10, 5, 0, 0), datetime.datetime(2018, 10, 6, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 11, 5, 0, 0), datetime.datetime(2018, 7, 5, 0, 0), datetime.datetime(2018, 9, 5, 0, 0), datetime.datetime(2018, 7, 5, 0, 0)]
日期列的内容col_datetime2是: ['2018-10-05 00:00:00', '2018-10-05 00:00:00', '2018-09-05 00:00:00', '2018-10-05 00:00:00', '2018-09-05 00:00:00', '2018-10-05 00:00:00', '2018-10-05 00:00:00', '2018-09-05 00:00:00', '2018-11-05 00:00:00', '2018-09-05 00:00:00', '2018-09-05 00:00:00', '2018-07-05 00:00:00', '2018-09-05 00:00:00', '2018-09-05 00:00:00', '2018-10-05 00:00:00', '2018-10-06 00:00:00', '2018-09-05 00:00:00', '2018-11-05 00:00:00', '2018-11-05 00:00:00', '2018-11-05 00:00:00', '2018-09-05 00:00:00', '2018-11-05 00:00:00', '2018-11-05 00:00:00', '2018-07-05 00:00:00', '2018-09-05 00:00:00', '2018-07-05 00:00:00']
当前sheet页的合并单元格有: [(3, 6, 5, 6), (9, 11, 2, 3), (1, 4, 4, 5)]
第3行第5列合并的单元格的数据是: female
获取合并单元格的起始行和起始列: [[3, 5], [9, 2], [1, 4]]
获取合并单元格的数据类型: <class 'list'>
获取合并单元格的值: female
获取合并单元格的值: 3000.0
获取合并单元格的值: 24.0