"장고 엑셀 파일 올리기"의 두 판 사이의 차이

(새 문서: == 개요 == 엑셀 파일을 올려 사용하기 위함. 엑셀파일을 올려 media에 저장하는 방법이 아니라, 엑셀 파일로부터 데이터를 받는 방법에 대...)
 
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
6번째 줄: 6번째 줄:
 
=== 시작 전 준비. 엑셀 핸들링 라이브러리 설치 ===
 
=== 시작 전 준비. 엑셀 핸들링 라이브러리 설치 ===
 
엑셀을 핸들링하는 다양한 라이브러리들이 있다. 취향에 맞는 걸 활용하면 OK.
 
엑셀을 핸들링하는 다양한 라이브러리들이 있다. 취향에 맞는 걸 활용하면 OK.
{| class="wikitable"
 
!
 
!
 
!설치방법
 
|-
 
|
 
|
 
|pip install openpyxl
 
|-
 
|
 
|
 
|
 
|-
 
|
 
|
 
|
 
|}
 
  
 +
라이브러리 종류는 [[:분류:엑셀 헨들링|분류:엑셀 헨들링]]을 참고하자.
 
= 구현 =
 
= 구현 =
  
44번째 줄: 28번째 줄:
 
     if request.method == "POST":
 
     if request.method == "POST":
 
         uploadedFile = request.FILES["uploadedFile"]  # post요청 안의 name속성으로 찾는다.
 
         uploadedFile = request.FILES["uploadedFile"]  # post요청 안의 name속성으로 찾는다.
 +
       
 +
        # 아래 두 줄은 핸들러마다 방법이 다르니 핸들러 문서를 참고하자.
 
         excel = openpyxl.load_workbook(uploadedFile, data_only=True)  # 파일을 핸들러로 읽는다.
 
         excel = openpyxl.load_workbook(uploadedFile, data_only=True)  # 파일을 핸들러로 읽는다.
         work_sheet = excel.work_sheet[0]  # 첫번째 워크시트를 사용한다.
+
         work_sheet = excel.work_sheet[0]  # 첫번째 워크시트를 사용한다. 이건 핸들러마다 다르다.
 
          
 
          
 
         # 엑셀 데이터를 리스트 처리한다.
 
         # 엑셀 데이터를 리스트 처리한다.

2022년 8월 30일 (화) 08:59 기준 최신판

1 개요편집

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

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

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

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

라이브러리 종류는 분류:엑셀 헨들링을 참고하자.

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={})  # 필요에 따라 렌더링.

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