遇到的从excel读取日期时变为浮点数的解决办法
首先回顾一下读取数据以及写入数据。
import xlrd
import xlwt
datas=xlrd.open_workbook('policy.xlsx') #打开一个名字为【policy.xlsx】的excel文件
table=datas.sheets()[0] #通过下标取不同的sheet表
#table=datas.sheet_by_name('sheet1') #或者通过sheet标的名字去选择具体的表
sheet_name=datas.sheet_names() #找出所有的表名
nrows=table.nrows #其中一个sheet表中所有的行数
ncols=table.ncols #其中一个sheet表中所有的列数
#向excel表格写入数据,先打开一个表格,插入数据,最后保存
wb=xlwt.Workbook() #打开一个excel文件,注意这里的Workbook,第一个W是大写
ws=wb.add_sheet('表格名字') #新增一个表格,也可以理解为给表格起一个名字
for rownum in range(1,nrows): #循环取值遍历文件中的最大行数,这里从1开始是为了下方的插入
row=table.row_values(rownum) #通过指定行数取出每一行的值
policy_num=str(row[0]) #第一列信息为保单号
name=str(row[1]) #第二列信息为姓名
#birth_date=str(row[3]) #第四列信息为出生日期
#这里出生日期如果使用这个代码,那么将会得到一个字符串,不会显示excel表格中的日期
birth_date=xlrd.xldate_as_datetime(table.cell(rownum,3).value,0)
#xlrd.xldate_as_tuple(table.cell(1,3).value,0) 是
#这里直接从excel中的日期直接转化为日期,不过它是这样的。如果你本来的日期是1985/8/24,
#那么birth_date结果为1985-08-24 00:00:00,如果你不想要时分秒,你可以这样做。
birth_date1=str(birth_date) #把这个结果转化为字符串
birth_date2=birth_date1[0:10] #然后进行切割,就会得到1985-08-24
#接下来进行插入我们上面打开的excel文件中
ws=write(rownum,0,label=policy_num)
ws=write(rownum,1,label=name)
ws=write(rownum,2,label=birth_date2) #这里rownum是变量,代表行,后面的数字代表列
ws.col(0).width = 256*20 #给第一列设置宽度,也可以全部写数字如:5120
wb.save('example.xlsx') #最后进行保存
解决这个问题就是把从excel中读取的日期进行转换,因为它直接得到的是浮点数。
还可以通过列值或者坐标进行取值。
a=table.row_values(0) #取第一行值
b=table.col_values(0) #取第一列值
c=table.cell(1,1).value #取第二行第二列的值
在excel中插入当前时间
使用到了datetime库,并且使用的时候需要先定义好插入的格式。
import xlwt #引用xlwt库
from datetime import * #引用datetime中的所有函数
style=xlwt.XFStyle() #style代表excel中的所有格式
style.num_format_str='YYYY-MM-DD' #设置style代表的格式为年月日
wb=xlwt.Workbook()
ws=wb.add_sheet('sheetname')
ws.write(0,0,datetime.now(),style) #在excel中的‘sheetname’表写入当前时间,格式为年月日
wb.save('example2.xlsx') #保存文件
#打开文件时,写入的内容显示的是######,这是因为单元格太小,拉大就可以显示日期了。
后续再补充~