zoukankan      html  css  js  c++  java
  • django xlwt excel数据导出

      最近在写主机管理并支持远程命令执行,返回结果以execl表格形式显示,涉及到execl表格的下载问题。网上大部分都是python2的部分的代码,我运行的环境是python3下,

    经过测试和修改,该了部分代码。

    首先我们先了解几个概念:

    1、content_type='application/vnd.ms-excel':该参数是告诉浏览器,传输的文件是什么类型文件。要以什么方式进行处理。

    2、Content-Disposition=‘attachment;filename=user.xls':Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。

    django版本:Django 1.10 python版本:Python 3.5.1

    创建简单的django框架的网站,进行测试:

    前端html文件:

    复制代码
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 
     9 <div>
    10     <p><a href="/output">导出csv</a></p>
    11 </div>
    12 </body>
    13 </html>
    复制代码

    django url:

    1 urlpatterns = [
    2     url(r'^admin/', admin.site.urls),
    3     url(r'^output/', views.output),
    4     url(r'^down/', views.down),
    5 
    6 ]

    视图代码:

    复制代码
     1 from django.shortcuts import render,HttpResponse
     2 import xlwt
     3 from io import StringIO,BytesIO
     4 # Create your views here.
     5 # def output(reuqest):
     6 def output(request):
     7     response = HttpResponse(content_type='application/vnd.ms-excel')
     8     response['Content-Disposition'] = 'attachment;filename=user.xls'
     9     wb = xlwt.Workbook(encoding = 'utf-8')
    10     sheet = wb.add_sheet(u'人员表单')
    11     #1st line
    12     sheet.write(0,0, '姓名')
    13     sheet.write(0,1, '英文名')
    14     sheet.write(0,2, '职位')
    15     sheet.write(0,3, '公司电话')
    16     sheet.write(0,4, '手机')
    17     sheet.write(0,5, 'QQ')
    18     sheet.write(0,6, 'MSN')
    19     sheet.write(0,7, 'Email')
    20     sheet.write(0,8, '办公地点')
    21     sheet.write(0,9, '部门')
    22     output = BytesIO()
    23     wb.save(output)
    24     output.seek(0)
    25     response.write(output.getvalue())
    26     return response
    27 def down(request):
    28     return render(request,'download.html')
    复制代码

    由于是测试,modle就没建表,只是简单做个测试。

    需要注意:

    1:在HttpResponse中,只有content_type而不是minetype。可以看源码。在低版本是minetype,在最新版本django运行会报错typeerror。

    2:在python3中以bytes形式传输,所以需要用IO模块中BytesIO而不是StringIO否则报错。

    效果:

  • 相关阅读:
    汇编语言LAHF和SAHF指令
    JSONHelper
    【CSS】利用宽高比例的媒体查询
    swiftmailer时没有设置https的选项,才可以发送成功。在linux下面
    DevExpress
    IntelliJ IDEA2017 激活方法 最新的激活注册方式方法,破解,密钥
    vue.js 列表追加项写法
    RedisCache 缓存
    时间通用类 datetime
    LogHelper 日志
  • 原文地址:https://www.cnblogs.com/ruiy/p/14916978.html
Copyright © 2011-2022 走看看