来源:https://blog.csdn.net/u013608482/article/details/80942427
原来写个了导出引发了个错误,excel表中最大行数65336,要做个分表判断
看了下上面的链接中的例子。整理下思路
.先定义单张表的数据总量(不能超过65336)
获取需要导出数据的总数 除以单表的数量 得到 几张表
设置一个集合来装表
sheets=[]
wbk=xlwt.Workbook()
filename = u"Licence日志信息表"
filename = urlquote(filename)
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=%s'%(filename)+ time.strftime('%Y%m%d', time.localtime(time.time())) + '.xls'
sheet = wbk.add_sheet("Log_0",cell_overwrite_ok=True) # 创建工作页
row0 = [u'ID', u'操作内容', u'操作类型', u'操作人账号', u'操作人', u'操作时间']
sheets.append(sheet)
for i in range(0, len(row0)):
sheets[0].write(0, i, row0[i])
data = Log.objects.all().filter(L_ID='license') #筛选
# print(len(data))
num = 1 #写入第几行
count =1 #写入第几条数据
if (len(data))<0:
sheet.write(num, 0, "没有可以导出的日志信息") # 工号
for d in data:
scount=int(count/65000)
if(len(sheets)<=scount):
sheets.append(wbk.add_sheet("Log_%s"%(scount+1),cell_overwrite_ok=True))
for i in range(0, len(row0)):
sheets[scount].write(0, i, row0[i])
num=1
sheet.write(num, 0, d.ID) #日志ID
sheet.write(num, 1, d.operation) #操作内容
sheet.write(num, 2, d.get_level_display()) # 操作类型
sheet.write(num, 3, d.UserID) # 操作人ID
sheet.write(num, 4, "系统" if d.UserID =="系统" else User.objects.get(id=d.UserID).name) # 操作人姓名
sheet.write(num, 5, "" if d.date == None else d.date.strftime("%Y-%m-%d %H:%M:%S")) # 操作时间
num = num + 1
count=count+1
wbk.save(response)