django 结合 xlwt 实现数据导入excel 并下载

内容借鉴:  django实现保存Excel、读取Excel、将数据库中的数据导出到Excelhtml

实现功能::前端

  前端将数据传过来, 后端将数据写入excel表格并下载。python

  注: 将数据库数据导入excel 并下载同理ajax

 

原理分析:数据库

  咱们在后台现将数据一二进制形式写入内存中, 使用HttpResponse, 进行返回并指明返回类型,  规定好文件名便可,django

过程:后端

  咱们在前端经过post 或get将数据提交过来, 后端将内容读出写入并下载。app

  注: 在使用ajax请求时实现不了下载功能。post

 

前端:ui

<div>
    <form class="layui-form" method="post" action="{% url 'myUtils:createtable' %}">
        <div class="layui-form-item layui-form-text">
            <label class="layui-form-label">内容</label>
            <div class="layui-input-block text-content">
            <textarea name="desc" placeholder="请输入内容, 表格列划分是以空格划分, 行划分是以换行来划分的" class="layui-textarea text"></textarea>
            </div>
        </div>
        <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn submit" lay-submit lay-filter="formDemo">当即提交</button>
            <button type="reset" class="layui-btn layui-btn-primary reset">重置</button>
        </div>
        </div>
    </form>   
</div>

 

view 代码:

class CreateTable(View):

    def get(self, request):
        return render(request, template_name="html/createtable.html", context={})

    def post(self, request):
        text = request.POST.get('desc')
        if text:
        # 指定文件类型
        # response = HttpResponse(content_type='application/octet-stream')
            #指定数据类型为excel
            response = HttpResponse(content_type='application/ms-excel')
            # 设置文件名
            response['Content-Disposition'] =  'attachment; filename="result.xls"'
            # 建立工做薄    
            wb = xlwt.Workbook(encoding='utf-8')
            # 建立表
            ws = wb.add_sheet("new sheet")
            font_style = xlwt.XFStyle()
            # 指定二进制
            font_style.font.bold = True
            # 写入表格
            text_rows = text.split("\n")
            for row, row_data in enumerate(text_rows):
                row_data = row_data.strip().split(" ")
                for col, col_data in enumerate(row_data):
                    ws.write(row, col, col_data, font_style)
            font_style = xlwt.XFStyle()
            wb.save(response)
        return response
相关文章
相关标签/搜索