장고 엑셀 파일 올리기

Pywiki
Sam (토론 | 기여)님의 2022년 8월 24일 (수) 17:10 판 (새 문서: == 개요 == 엑셀 파일을 올려 사용하기 위함. 엑셀파일을 올려 media에 저장하는 방법이 아니라, 엑셀 파일로부터 데이터를 받는 방법에 대...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

1 개요

엑셀 파일을 올려 사용하기 위함.

엑셀파일을 올려 media에 저장하는 방법이 아니라, 엑셀 파일로부터 데이터를 받는 방법에 대해 안내한다.

1.1 시작 전 준비. 엑셀 핸들링 라이브러리 설치

엑셀을 핸들링하는 다양한 라이브러리들이 있다. 취향에 맞는 걸 활용하면 OK.

설치방법
pip install openpyxl

2 구현

2.1 탬플릿

<form action="{% url '앱이름:uploadFile' %}" method="POST" enctype="multipart/form-data">
        <input type="file" name="uploadedFile">
        {% csrf_token %}
        <input type="submit" value="Upload">
</form>

2.2

from django.shortcuts import render
import openpyxl  # 취향에 맞는 핸들러로 조작한다.
from . import models

def uploadFile(request):
    if request.method == "POST":
        uploadedFile = request.FILES["uploadedFile"]  # post요청 안의 name속성으로 찾는다.
        excel = openpyxl.load_workbook(uploadedFile, data_only=True)  # 파일을 핸들러로 읽는다.
        work_sheet = excel.work_sheet[0]  # 첫번째 워크시트를 사용한다.
        
        # 엑셀 데이터를 리스트 처리한다.
        work_sheet_data = []
        for row in work_sheet.rows:  # 열을 순회한다.
            row_data = []  # 열 데이터를 담기 위한 리스트
            for cell in row:
                row_data.append(cell.value)  # 셀 값을 하나씩 리스트에 담는다.
            work_sheet_data.append(row_data)  # 워크시트 리스트 안에 열 리스트를 담아...
            # work_sheet_data[열번호][행번호] 형태로 엑셀의 데이터에 접근할 수 있게 된다.
            
        for row in work_sheet_data:  # 데이터의 열을 순회하며...
            모델 = models.모델(속성=row[행번호], 속성2=row[행번호2], ...)  # 데이터를 모델에 담는다.
            모델.save()

    return render(request, ".html", context={})  # 필요에 따라 렌더링.

모델 등은 필요에 따라 구성하면 된다.