今天遇到一个比较实际的问题,从库存报表里面识别出最长库龄的零件,并计算出库龄。
思路很简单,将当前日期减去表格日期,得到库龄。找到max库龄就ok了。
以2行的日期为例,先print日期
d1 = sheet1.cell(1, 22)
print(d1)
结果是:xldate:42368.0
不是一个数字,浮点数字42368.0。
然后用print一下当前的日期。
d2 = datetime.datetime.now()
print(d2)
得到结果是时间数组格式:2020-05-25 20:39:09.933949
明显两者类型不同无法直接相减。
解决思路:
接下来是很有趣的信息(本文的精华就是下面这两句话)。
excel读到的日期的浮点数,代表的是自1900年1月1日以来的天数。
python的时间戳是指格林威治时间自1970年1月1日至当前时间的总秒数。
所以有两种思路:库龄天数=(当前时间戳-表格时间戳)/60/60/24
将excel的浮点数(42368.0)转化成时间数组格式(这步有点麻烦),再转化成时间戳。
然后也将python读到的当前时间(2020-05-25 20:39:09.933949)转换成时间戳,然后再将秒数折算成天数。
2. 库龄天数=表格浮点数-当前日期转换成浮点数
将python的当前时间数组格式-1899年12月31日的时间数组格式,得到的一个时间数组格式。这个差值转换成天数(datetime模块下 .days)。得到当前距离1900年1月1日的天数。然后减去表格的浮点数,得到库龄。
我用的是第2种解决方法是:
date_start = datetime.datetime(1899, 12, 31) #excel表起始日期1900年1月1日
date_now = datetime.datetime.now() #当前时间
d2 = date_now - date_start #今天距离1900年1月1日时间
d2 = today.days #转化为1900年1月1日天数。
d3 = d1 - d2 #库龄
print(d1)
print(d2)
print(d3)
#得到结果
42368.0
43975
1607.0 #库龄
附上完整的代码,找到最长库龄。
import xlrd
import xlwt
import datetime
#读取收货日期,计算库龄,找到最长库龄
wb = xlrd.open_workbook('库存报表20200520.xlsx')
sheet1 = wb.sheet_by_name('Sheet1')
#计算当前时间,转换成excel时间戳,excel时间戳其实时间1990年1月1日
date_start = datetime.datetime(1899, 12, 31)
date_now = datetime.datetime.now()
tod = date_now - date_start
#计算库龄,写入数列deltas
deltas = []
titlesrow = 1
nrows = sheet1.nrows-2
for i in range(nrows):
d = sheet1.cell(1+i, 22)
d = int(d.value)
delta = tod.days - d
deltas.append(delta)
# 新建一个表格,记录分析结果
wb = xlwt.Workbook()
sheet = wb.add_sheet('关键数据')
titles = ['最长库龄', '零件号', '零件名称', '数量']
for i in range(len(titles)):
sheet.write(0, i, titles[i])
# 找到最大库龄,写到表格
max = max(deltas)
sheet.write(1, 0, max)
# 最大库龄对应的零件号,数量
max_index = deltas.index(max)
max_part = sheet1.cell(max_index + 1, 3).value
max_name = sheet1.cell(max_index + 1, 4).value
max_num = sheet1.cell(max_index + 1, 5).value
sheet.write(1, 1, max_part)
sheet.write(1, 2, max_name)
sheet.write(1, 3, max_num)
wb.save('库存分析.xls')
输出结果,在库存分析.xls的sheet1中:
第一次写文章,不知道大家看懂了没。
本文介绍了如何在Python中处理Excel文件中的日期,通过将Excel的日期浮点数转换为时间戳,计算出库龄。作者分享了解决当前时间与Excel日期差值的方法,并提供完整代码示例,用于找出库存报表中的最长库龄。
Python时间戳与Excel的日期&spm=1001.2101.3001.5002&articleId=111444901&d=1&t=3&u=6fa880e8847c4e9a8205a1a51f14d9bc)
1万+

被折叠的 条评论
为什么被折叠?



