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

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

实现功能::

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

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

 

原理分析:

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

过程:

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

  注: 在使用ajax请求时不可以直接下载

 

前端:

<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

 

posted @ 2019-10-23 00:07  ShanCe-刘勇  阅读(730)  评论(0编辑  收藏  举报