django/python excel 上傳後臺 並讀取excel內容,含日期格式解析處理
阿新 • • 發佈:2018-12-01
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("上傳的檔案為空或者其他錯誤")
輸出結果: