step1: 读取上传的excel数据并存档
step2: 读取存入本地的excel文件,对内容进行处理,其中包含日期格式处理
重点代码:
issueDate = sheetContent.cell(row,1).value
date_value = xlrd.xldate_as_tuple(issueDate,workbook.datemode)
import datetime
issueDate = datetime.date(*date_value[:3]).strftime("%Y-%m-%d")
print(issueDate)
def uploadIssue(request):
if request.method=="GET":
return render(request,"addUploadIssue.html")
else:
file = request.FILES.get("files")
if file:
print(file.name, file.size)
#step1 先进行保存
from ctcqs import settings
import uuid,os
new_fileName = str(uuid.uuid4())+file.name
new_filePath = os.path.join(settings.MEDIA_ROOT,"temp",new_fileName)
new_file = open(new_filePath,"wb")
for item in file.chunks():
new_file.write(item)
new_file.close()
#step2 然后读取存入数据库
import xlrd
workbook = xlrd.open_workbook(new_filePath)
#获取页签内容,也可以by index获取
sheetContent = workbook.sheet_by_name("Sheet1")
#获取总行数和总列数
print(sheetContent.nrows,sheetContent.ncols)
if sheetContent.nrows<=1:
return HttpResponse("上传的文件为空或者其他错误")
#获取excel每个单元格的值,并赋值给issueList Models
#看看单元格格式ctype ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
print(sheetContent.cell(1,1),sheetContent.cell(1,1).ctype)
# 从第二行开始取值,第一行是标题
for row in range(1,sheetContent.nrows):
#如果有字符乱码 可以加encode ,比如sheetContent.cell(row,0).value.encode("utf-8")
companyID = sheetContent.cell(row,0).value
issueDate = sheetContent.cell(row,1).value #时间格式需要特殊处理
auditPerson = sheetContent.cell(row,2).value #外键
issueSite = sheetContent.cell(row,3).value
issueDept = sheetContent.cell(row,4).value #外键
issueType = sheetContent.cell(row,5).value #外键
issueContent = sheetContent.cell(row,6).value
issueListQS = sheetContent.cell(row,7).value #外键
improve = sheetContent.cell(row,8).value
status = sheetContent.cell(row,9).value
mark = sheetContent.cell(row,10).value
hide = False #默认false
#针对时间格式处理
date_value = xlrd.xldate_as_tuple(issueDate,workbook.datemode)
import datetime
issueDate = datetime.date(*date_value[:3]).strftime("%Y-%m-%d")
print(13123132,issueDate)
return HttpResponse("asdf")
else:
return HttpResponse("上传的文件为空或者其他错误")
输出结果: