TypeError: unsupported operand type(s) for -: 'datetime.date' and 'str'
求各位大神帮帮忙啊。
看提示很简单,应该是date类型和str类型不能做减法,但是这句
startDate = datetime.date(y1,m1,d1)
得出的应该就是date类型啊?!
代码: 全选
#! /usr/bin/env python
#coding=gb18030
import xlrd
import datetime
#import os
#import time
fname='output.html'
name=[]#姓名列表
row_list = []#表格内容
startDate=''
endDate=''
def inputDate():
startDate=''
endDate=''
(y1,m1,d1)=input('start Date(format:YYYY,MM,DD):')
(y2,m2,d2)=input('end date(format:YYYY,MM,DD):')
startDate = datetime.date(y1,m1,d1)
endDate = datetime.date(y2,m2,d2)
return startDate,endDate
def readNames():
"""读入name文件"""
nameUrl='name.txt'
f=open(nameUrl,'r')
for i in f:
name.append(i.rstrip('\n'))
f.close()
def readSheet():
'''读取短信excel表格'''
book = xlrd.open_workbook('t.xls')
sheet=book.sheet_by_index(0)
nrows = sheet.nrows
for i in range(0,nrows):
row_data = sheet.row_values(i)
row_list.append(row_data)
#冒泡法以日期排序'''
for a in range(0,len(row_list)-1):
for b in range(a+1,len(row_list)):
if row_list[a]>row_list[b]:
t=row_list[a];row_list[a]=row_list[b];row_list[b]=t
def msg():
print type(startDate)
'''按照姓名'''
msgbox=[]
__s_date=datetime.date(1899, 12, 31).toordinal()-1#注意这里的日期算法
for a in name:
m='<tr bgcolor="White"><td>'+a+'</td>'
for b in row_list:
#print b[1].encode('gb18030')
if a==b[1].encode('gb18030'):#如果姓名数据跟表格姓名相同
m=m+'<td><ul>'
lenb=len(b)
for c in range(2,lenb):
if isinstance(b[c],float):
bDate=datetime.date.fromordinal(int(b[c])+__s_date)#看这个日期的算法
days1=(bDate-startDate).days
days2=(bDate-endDate).days
if days1>=0 and days2<=0:
b[c]=bDate
else:
break
else:
b[c]=b[c].encode('gb18030')
m=m+'<li>'+str(b[c])+'</li>'
#print m
m=m+'</ul></td>'
m=m+'</tr>'
msgbox.append(m)
inputToFile(msgbox)
def inputToFile(msgbox):
fobj=open(fname,'w')
fobj.writelines('<script language="javascript">function preview(){\
window.clipboardData.setData("Text",document.all("table1").outerHTML);\
try\
{\
var ExApp = new ActiveXObject("Excel.Application");\
var ExWBk = ExApp.workbooks.add();\
var ExWSh = ExWBk.worksheets(1);\
ExApp.DisplayAlerts = false;\
ExApp.visible = true;\
} \
catch(e)\
{\
alert("您的电脑没有安装Microsoft excel软件!");\
return false\
} \
ExWBk.worksheets(1).Paste; \
}</script>\
')
fobj.writelines('<table align="center"><tr><td><input type="button" value="output excel" onclick="preview();"></td></tr></table>')
fobj.writelines('<table id="table1" bgcolor="gray" border=1>')
fobj.writelines([a for a in msgbox])
fobj.writelines('</table>')
fobj.close()
if __name__ == '__main__':
inputDate()#输入日期
readNames()#读取姓名数据
readSheet()#读取表格内容
msg()