zoukankan      html  css  js  c++  java
  • 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("
    ")
                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
  • 相关阅读:
    MySQL进阶:主主复制+Keepalived高可用
    Zabbix 5.0:磁盘自动发现和读写监控
    Zabbix 5.0 优化建议
    容器进阶:OCI与容器运行时
    openresty快速安装
    ansible:playbook详解
    Shell:如何遍历包含空格的文本
    Linux性能优化:内存使用情况分析
    Shell:如何写一个多选菜单的脚本
    算法路漫漫(二) 递归与归并
  • 原文地址:https://www.cnblogs.com/ShanCe/p/11723587.html
Copyright © 2011-2022 走看看