바뀜

2,246 바이트 추가됨 ,  2022년 8월 24일 (수) 17:10
새 문서: == 개요 == 엑셀 파일을 올려 사용하기 위함. 엑셀파일을 올려 media에 저장하는 방법이 아니라, 엑셀 파일로부터 데이터를 받는 방법에 대...
== 개요 ==
엑셀 파일을 올려 사용하기 위함.

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

=== 시작 전 준비. 엑셀 핸들링 라이브러리 설치 ===
엑셀을 핸들링하는 다양한 라이브러리들이 있다. 취향에 맞는 걸 활용하면 OK.
{| class="wikitable"
!
!
!설치방법
|-
|
|
|pip install openpyxl
|-
|
|
|
|-
|
|
|
|}

= 구현 =

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

== 뷰 ==
<syntaxhighlight lang="python">
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={}) # 필요에 따라 렌더링.
</syntaxhighlight>모델 등은 필요에 따라 구성하면 된다.
[[분류:장고 엑셀]]