您的位置:首页 > 其它

excel 数据读取,数据遍历,获取日期数据和合并单元格数据

2018-11-14 14:14 155 查看
版权声明:原创博客,不得用于商业用途 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: