examtest/test_server/examtest/exports.py

51 lines
1.8 KiB
Python

from openpyxl.workbook import Workbook
from django.conf import settings
from datetime import datetime
from openpyxl.styles import Font, Fill
from rest_framework.serializers import Serializer
from .models import ExamTest, AnswerDetail
from django.http import HttpResponse
from docxtpl import DocxTemplate
from io import BytesIO
from .serializers import ExamTestDetailSerializer
import os
BASE_DIR = settings.BASE_DIR
def export_test(tests):
'''
params: serializer tests
return: xlsx path
'''
wb = Workbook()
ws1 = wb.active
ws1.title = '用户表'
ws1.append(['类型','用户姓名', '用户单位', '工作类别', '押题卷', '得分', '耗时', '答题时间'])
row = ws1.row_dimensions[1]
row.font = Font(bold=True)
for i in tests:
ws1.append([i['type'], i['consumer_name'], i['consumer_company_name'], i['workscope_name'], i['paper_name'], i['score'], i['took_format'], i['start_time']])
filename = 'tests' + datetime.now().strftime("%Y%m%d%H%M%S") +'.xlsx'
path = '/media/export/' + filename
wb.save((BASE_DIR + path).replace('\\', '/'))
return path
def exportw_test(obj, bool):
"""
导出个人考试记录word版本
"""
filename = obj.exam.name + '-' + obj.consumer.name + '-' + obj.consumer.username + '.docx'
path = '/media/export/' + filename
fullpath = BASE_DIR + path
if bool or (not os.path.exists(fullpath)):
data = ExamTestDetailSerializer(instance=obj).data
#开始生成word
doc = DocxTemplate(BASE_DIR + "/tmp/examtest.docx")
doc.render(data)
doc.save(fullpath)
# output = BytesIO()
# doc.save(output)
# output.seek(0)
# res = HttpResponse(content_type='application/msword')
# res['Content-Disposition'] = 'attachment;filename='+filename+'.docx'
# res.write(output.getvalue())
return path