一、安装

  目前支持Excel2003的第三方库多少还有几个,本文使用的是xlwt,安装方式命令行:pip install xlwt

二、使用

  首先、引入该库,例如:from xlwt import *

  其次、

    创建Excel文件,如:workbook = Workbook(encoding = 'utf-8')

    创建Excel sheet,如:worksheet = workbook.add_sheet("Summary"),即sheet名称为Summary

    常用方式:

      设置列宽:worksheet.col(0).width = 10000,即设置第一列宽度为10000,Excel文件的行列索引均从0开始

      写数据:worksheet.write(row, column, domain_title[column], style.head), 写入第row+1行,column+1列的单元格数据 domain_title[column],设置的格式style.head

      此处格式的定义如: 

head = easyxf("""
font:
name Arial,
colour_index white,
bold on,
height 0xA0;
align:
wrap off,
vert center,
horiz center;
pattern:
pattern solid,
fore-colour 0x19;
borders:
left THIN,
right THIN,
top THIN,
bottom THIN;
""")
body = easyxf("""
font:
name Arial,
bold off,
height 0XA0;
align:
wrap on,
vert center,
horiz left;
borders:
left THIN,
right THIN,
top THIN,
bottom THIN;
""")

      以上为一些设置的格式,使用xlwt的类EasyXF创建。

    获取某个sheet, 如:worksheet = workbook.get_sheet("Summary"),则可获取sheet 名称为Summary的sheet

第三、保存输出

  输出到Response流:

   out = BytesIO()
workbook.save(out)
out.seek(0)
response = HttpResponse(out.getvalue(), content_type = 'application/vnd.ms-excel')
dt = datetime.datetime.now()
response['Content-Disposition'] = 'attachment;filename={} {}.xls'.format(urlquote(domain_name), dt.strftime('%Y-%m-%d %H:%M:%S'))
print("end downloading...")
return response

  以上,值得一提的是,如果你的Excel文件的名称含有中文,请使用urlquote包装一下,这样下载下来的Excel文件中文名才能正常显示,上面也是因为文件名含有中文才使用的这个函数的;引入的方式:from django.utils.http import urlquote

  至此、下载完成。

贴下代码:

# coding: UTF-8

from io import BytesIO

import pandas
from django.http import HttpResponse, StreamingHttpResponse
from django.utils import timezone as datetime
from django.utils.http import urlquote
from xlwt import * from automation import style
from automation.ecarxzip import ZipFile
from automation.tasks import *
from web.settings import DOWNLOAD_URL def download_excel(request, task_id, domain_name = '全部'):
print("start downloading xls...", task_id) domains = [{'domain_name': domain_name}]
ai_task = AITask.objects.get(id = task_id)
if '全部' == domain_name:
if 1 == ai_task.type:
domains = Classification.objects.values('domain_name').distinct().filter(type = 1)
elif 2 == ai_task.type:
domains = Classification.objects.values('domain_name').distinct().filter(type = 2)
else:
pass summaries = []
summary_title = ["Domain", "Pass", "Fail"]
domain_title = ['Domain', 'One level', 'Two level', 'Semantic', 'Priority', 'Intent group', 'Intent', 'Result',
'Handle time', 'Response time', 'Server Domain', 'Detail'] workbook = Workbook(encoding = 'utf-8')
worksheet = workbook.add_sheet("Summary")
for column in range(len(summary_title)):
worksheet.write(0, column, summary_title[column], style.head) for domain in domains:
dmain_name = domain["domain_name"]
reports = ai_task.report.filter(semantic__classification__domain_name__exact = dmain_name)
if len(reports):
row = pass_no = fail_no = 0
worksheet = workbook.add_sheet(dmain_name)
worksheet.col(3).width = worksheet.col(5).width = worksheet.col(6).width = 7000
worksheet.col(11).width = 10000
for column in range(len(domain_title)):
worksheet.write(row, column, domain_title[column], style.head) for report in reports:
row = row + 1
semantic = report.semantic
classification = semantic.classification
worksheet.write(row, 0, classification.domain_name, style.body)
worksheet.write(row, 1, classification.first_classification, style.body)
worksheet.write(row, 2, classification.second_classification, style.body)
worksheet.write(row, 3, semantic.name, style.body)
worksheet.write(row, 4, classification.semantic_property, style.body)
worksheet.write(row, 5, classification.intent_group, style.body)
worksheet.write(row, 6, classification.intent, style.body)
worksheet.write(row, 7, report.result, style.body)
worksheet.write(row, 8, report.in_handle_time, style.body)
worksheet.write(row, 9, report.ex_handle_time, style.body)
worksheet.write(row, 10, report.server_domain, style.body)
worksheet.write(row, 11, report.description[:32767], style.large_text) if "pass" == report.result:
pass_no = pass_no + 1
elif "fail" == report.result:
fail_no = fail_no + 1
summaries.append((dmain_name, pass_no, fail_no)) row = 0
worksheet = workbook.get_sheet("Summary")
for dmain_name, pass_no, fail_no in summaries:
row = row + 1
worksheet.write(row, 0, dmain_name, style.body)
worksheet.write(row, 1, pass_no, style.body)
worksheet.write(row, 2, fail_no, style.body) out = BytesIO()
workbook.save(out)
out.seek(0)
response = HttpResponse(out.getvalue(), content_type = 'application/vnd.ms-excel')
dt = datetime.datetime.now()
response['Content-Disposition'] = 'attachment;filename={} {}.xls'.format(urlquote(domain_name), dt.strftime('%Y-%m-%d %H:%M:%S'))
print("end downloading...")
return response

      

Python/Django 下载Excel2003的更多相关文章

  1. Python/Django 下载Excel2007

    一.前提 上一篇,我写了下载Excel2003的博文,这里写下载Excel2007的博文的原因有三: 第一.Excel2003基本已经淘汰了 第二.Excel2003下载文件太大,不利于网络传输 第三 ...

  2. 搭建Python+Django开发环境

    第一步:安装python. 常见的windows系统,直接python网站下载 最新的版本python3.5. python安装好之后,配置好环境变量.使得python和 pip命令能够正常使用. 第 ...

  3. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  4. Python.Django视频教程(全13集)

    Python.Django视频教程(全13集)教程目录: 下载地址:http://www.fu83.cn/thread-205-1-1.html

  5. Python+Django+Eclipse 在Windows下快速开发自己的网站

    一.配置开发环境 我的开发环境是:Python3.3.2 + Django1.5.2 + Eclipse 1.安装Python 下载地址:http://www.python.org/getit/ 安装 ...

  6. python Django 学习笔记(一)—— Django安装

    注:本人python版本2.7.5 ,win7系统 安装Django https://www.djangoproject.com/download/ 官方下载Django-1.5.5.tar.gz 1 ...

  7. 教你如何将 Sublime 3 打造成 Python/Django IDE开发利器

    Sublime Text 是一款非常强大的文本编辑器, 下面我们介绍如何将 Sublime Text 3 打造成一款 Python/Django 开发利器: 1. 安装 Sublime Text 3 ...

  8. 将 Sublime 3 打造成 Python/Django IDE

    Sublime Text 是一款非常强大的文本编辑器, 下面我们介绍如何将 Sublime Text 3 打造成一款 Python/Django 开发利器: 1. 安装 Sublime Text 3 ...

  9. Python+django开发环境搭建

    Python目前主版本有2个,2.7+和3.4+ 新入手,决定还是从2.7开始 先从python官网https://www.python.org/下载python2.7.10,64位版本(这里注意,选 ...

随机推荐

  1. Linux学习笔记(五) 账号管理

    1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...

  2. Python学习笔记之生成器、迭代器和装饰器

    这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 ...

  3. jieba的基本使用

    目录 1.分词 2.添加自定义词典 3.关键词提取 4.词性标注 jieba 是一款优秀的 Python 第三方中文分词库,可以使用 pip install jieba / pip3 install ...

  4. pageContext对象的使用及常用方法

    pageContext对象的使用及常用方法 制作人:全心全意 获取页面上下文的pageContext对象是一个比较特殊的对象,通过它可以获取JSP页面的request.response.session ...

  5. css实现圆角效果

    源码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...

  6. CSS3制作404立体字体

    CSS3制作404立体字体页面效果     鼠标移动上去,背景色变白.       动态效果:     .demo p:first-child span:hover { text-shadow:0px ...

  7. ansible plugins简介

    ansible插件是增强ansible的核心功能的代码片段,ansible使用插件架构来实现丰富,灵活和可扩展的功能集. Ansible提供了许多方便的插件,您可以轻松编写自己的插件. 下边简单介绍A ...

  8. Meanshift,聚类算法

    记得刚读研究生的时候,学习的第一个算法就是meanshift算法,所以一直记忆犹新,今天和大家分享一下Meanshift算法,如有错误,请在线交流. Mean Shift算法,一般是指一个迭代的步骤, ...

  9. HDU 1210

    感觉就是乱搞找规律 自己写几组数据 本来开始是想着把 n 个数字每次回到原来位置各需要多少次,然后取它们的最小公倍数就好了 但是数据写着写着发现每一个数回到原来位置次数都是一样的,那么就简单了,直接第 ...

  10. 【BZOJ3676&UOJ103】回文串(manacher,Trie)

    题意:考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度. 请你求出s的所有回文子串中的最大出现值. len<=300000 思路:鸣谢UO ...