当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 20:40 
头像

注册: 2007-12-03 9:54
帖子: 943
送出感谢: 0 次
接收感谢: 0 次
第61行出错:
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()

代码中读取的excel文件
附件:
t.xls [93.5 KiB]
被下载 18 次


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 20:47 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
注意变量的作用域。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 20:51 
头像

注册: 2007-12-03 9:54
帖子: 943
送出感谢: 0 次
接收感谢: 0 次
我猜出来了,但是这个应该怎么改呢?请大神帮忙看看阿


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 21:11 
头像

注册: 2007-12-03 9:54
帖子: 943
送出感谢: 0 次
接收感谢: 0 次
不能沉了啊,哪位帮我解答一下,感激不尽 阿


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 21:30 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
你为什么不看教程呢。。

简单的解决办法是:
代码:
global startDate, endDate


但这样的代码实在是太 Ugly 了。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 21:40 
头像

注册: 2007-12-03 9:54
帖子: 943
送出感谢: 0 次
接收感谢: 0 次
:em06
见笑了,要不是因为这个问题很长时间解决不了,我是不会放在这的,水平太那个啥了
这个全局变量的定义放在什么地方呢? :em03


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 21:42 
头像

注册: 2007-12-03 9:54
帖子: 943
送出感谢: 0 次
接收感谢: 0 次
另外,我也确实看教程了,无奈的是,半路出家,还没老师教,看教程觉得还行,但写东西就真难为我了


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 【求助】一小段读取excel的代码出错
帖子发表于 : 2011-03-20 23:51 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
aric286 写道:
:em06
见笑了,要不是因为这个问题很长时间解决不了,我是不会放在这的,水平太那个啥了
这个全局变量的定义放在什么地方呢? :em03


我很想给你贴教程。。。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译