Python有很多操作Excel的第三方库,这里用的则是Python自带的一个库叫csv,使用的时候直接import csv就行了。
rs =obj #数据集(我这里用的是mongodb数据库,所以这里的数据集是一个对象)
csvfile = StringIO() #创建一个字符串缓存对象writer = csv.writer(csvfile) #创建一个csv的writer对象
writer.writerow(titles) #在Excel文件第一行添加title
for r in rs.get("results",[]): #循环数据集,把里面的数据一行一行的写进去(注:因为我这里是要把数据按照上面第一行对应的顺序写出来,所以循环写,如果不要这么做的话,也可直接这样子: writer.writerow(rs) 把一个数据集直接写进去。
listr = [r.subject, r.event.label, r.monitorObjName, r.content, r.user.engineer.titleOrUid(),
xutils.formartTime(r.startTime, fm="%Y-%m-%d %H:%M") ,
xutils.formartTime(r.endTime, fm="%Y-%m-%d %H:%M") ,
r.emergencyDegree]
writer.writerow(listr)
csvfile = codecs.EncodedFile(csvfile, "gbk", "utf-8") #如果你碰到编码问题了就加上后面那两个参数吧,具体参数还是以你自己的环境而定,不一定是gbk和utf8哦
csvfile.seek(0)#这句话一定不能漏,它是表示指针跳到文件开始的位置,这样下面的read才会从第0个字符串开始读取。
data = csvfile.read() #read()表示读取到文件尾部,如果像这样read(5)在括号里加上数字,则是指明读取多少个字节。还有readline和readlines这两个函数,分别表示逐行读取和把数据读取到一个列表中去。
csvfile.close()#关闭文件
response = HttpResponse(data,mimetype='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename=Appraisements_file.csv'
return response #返回一个response结果到页面下载。