장고 관련해서 admin에서나 일반 응답으로 csv로 export하는 글은 많지만 csv 파일에 접근하는 사람마다 엑셀 설정이 달라
한국어과 관련된 인코딩으로 인해 파일이 깨져서 보이거나 하는 문제가 발생한다.
그 때문에 파일을 열고 일일이 엑셀 설정을 바꿔야 정상적으로 읽히는 경우가 많다.
이번 글에서는 장고에서 .xls 파일로 export 하는 방법에 대해서 알아보도록 하겠다.
1. xlwt 받기
먼저 아래의 모듈을 받아줘야 한다.
각자의 가상환경에 맞게 받아주면 된다.
pip install xlwt
2. 엑셀 다운로드 구현
다음은 엑셀 export 기능을 구현할 app의 views.py에 들어가 아래처럼 구현하면 된다.
import xlwt
#유저의 이름과 이메일을 엑셀 파일로 추출한다고 가정해보자
def excel_export(request):
response = HttpResponse(content_type="application/vnd.ms-excel")
response["Content-Disposition"] = 'attachment;filename*=UTF-8\'\'example.xls'
wb = xlwt.Workbook(encoding='ansi') #encoding은 ansi로 해준다.
ws = wb.add_sheet('참가자') #시트 추가
row_num = 0
col_names = ['email', 'name']
#열이름을 첫번째 행에 추가 시켜준다.
for idx, col_name in enumerate(col_names):
ws.write(row_num, idx, col_name)
#데이터 베이스에서 유저 정보를 불러온다.
rows = User.objects.all().values_list('name', 'email')
#유저정보를 한줄씩 작성한다.
for row in rows:
row_num +=1
for col_num, attr in enumerate(row):
ws.write(row_num, col_num, attr)
wb.save(response)
return reponse
위 코드를 응용해서 필요한 데이터를 데이터 베이스에서 읽어서 엑셀로 생성하면 된다.
참고로 중요한건 문자열 밖에 작성이 안되니 datetime와 같은 객체는 string으로 바꿔서 ws.write를 적용해주면 된다.
아래 동영상을 참고 해도 좋다
tutorial101.blogspot.com/2020/04/django-how-to-export-data-to-xls-file.html
'Web Programming > Django' 카테고리의 다른 글
[Django] python manage.py를 하면 무슨 일이? (0) | 2021.02.26 |
---|---|
[Django] Django Template 인덱스 사용하기 (0) | 2021.02.22 |
[Django] django apache (CentOS) 배포 (0) | 2021.01.26 |
[Django] 장고 migrations 명령어 (0) | 2020.12.24 |
[Django] Template Tags and Filters (Filter 편) (0) | 2020.12.10 |