1. 程式人生 > >django/python excel 上傳後臺 並讀取excel內容,含日期格式解析處理

django/python excel 上傳後臺 並讀取excel內容,含日期格式解析處理

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("上傳的檔案為空或者其他錯誤")

輸出結果: