参考了以前kevin的代码,搞起来快呀,哈哈哈,,阿里亚多。。。。

代码的意思比较明白,不注释,几乎自解释。。。

就是定义EXCEL时,比较硬生生的,一步一步没有快捷的方法。

另外就是取时间出来时,如果时区不对,就要自已来转换下。另外,数字型之类的要转换为字符型,不然,又会出错。。。

def ExportContentByJiraVersion(request, site_name=None, jira_version=None):
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response[
        'Content-Disposition'] = 'attachment;filename={0}-{1}.xls'.format(site_name, jira_version)
    wb = xlwt.Workbook(encoding='utf-8')
    sheet_prd = wb.add_sheet('PRD')
    sheet_uat = wb.add_sheet('UAT')
    sheet_fat = wb.add_sheet('FAT')

    style_heading = xlwt.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;
        """
                                )
    style_body = xlwt.easyxf("""
        font:
            name Arial,
            bold off,
            height 0XA0;
        align:
            wrap on,
            vert center,
            horiz left;
        borders:
            left THIN,
            right THIN,
            top THIN,
            bottom THIN;
        """
                             )
    style_green = xlwt.easyxf(" pattern: pattern solid,fore-colour 0x11;")
    style_red = xlwt.easyxf(" pattern: pattern solid,fore-colour 0x0A;")
    fmts = [
        'M/D/YY',
        'D-MMM-YY',
        'D-MMM',
        'MMM-YY',
        'h:mm AM/PM',
        'h:mm:ss AM/PM',
        'h:mm',
        'h:mm:ss',
        'M/D/YY h:mm',
        'mm:ss',
        '[h]:mm:ss',
        'mm:ss.0',
    ]
    style_body.num_format_str = fmts[0]
    # 1st line
    sheet_prd.write(0, 0, '发布单', style_heading)
    sheet_prd.write(0, 1, '组件', style_heading)
    sheet_prd.write(0, 2, '环境', style_heading)
    sheet_prd.write(0, 3, '进度', style_heading)
    sheet_prd.write(0, 4, 'JIRA问题号', style_heading)
    sheet_prd.write(0, 5, '操作用户', style_heading)
    sheet_prd.write(0, 6, '时间', style_heading)

    row = 1
    contents = XXX.objects.filter(site_name__name=site_name).filter(jira_issue_version=jira_version)\
        .filter(deploy_status='PRD')
    for content in contents:
        sheet_prd.write(row, 0, content.name, style_body)
        sheet_prd.write(row, 1, content.app_name.name, style_body)
        sheet_prd.write(row, 2, content.deploy_status, style_body)
        if content.deploy_progress == u'已发布':
            sheet_prd.write(row, 3, content.deploy_progress, style_green)
        else:
            sheet_prd.write(row, 3, content.deploy_progress, style_red)
        sheet_prd.write(row, 4, content.jira_issue_no, style_body)
        sheet_prd.write(row, 5, str(content.create_user), style_body)
        sheet_prd.write(row, 6, str(content.change_date + timedelta(hours=8)), style_body)

        # 第一行加宽
        sheet_prd.col(0).width = 100 * 50
        sheet_prd.col(1).width = 200 * 50
        sheet_prd.col(2).width = 50 * 50
        sheet_prd.col(3).width = 50 * 50
        sheet_prd.col(4).width = 200 * 50
        sheet_prd.col(5).width = 50 * 50
        sheet_prd.col(6).width = 200 * 50
        row += 1

    # 1st line
    sheet_uat.write(0, 0, '发布单', style_heading)
    sheet_uat.write(0, 1, '组件', style_heading)
    sheet_uat.write(0, 2, '环境', style_heading)
    sheet_uat.write(0, 3, '进度', style_heading)
    sheet_uat.write(0, 4, 'JIRA问题号', style_heading)
    sheet_uat.write(0, 5, '操作用户', style_heading)
    sheet_uat.write(0, 6, '时间', style_heading)

    row = 1
    contents = XXX.objects.filter(site_name__name=site_name).filter(jira_issue_version=jira_version)\
        .filter(deploy_status='UAT')
    for content in contents:
        sheet_uat.write(row, 0, content.name, style_body)
        sheet_uat.write(row, 1, content.app_name.name, style_body)
        sheet_uat.write(row, 2, content.deploy_status, style_body)
        if content.deploy_progress == u'已发布':
            sheet_uat.write(row, 3, content.deploy_progress, style_green)
        else:
            sheet_uat.write(row, 3, content.deploy_progress, style_red)
        sheet_uat.write(row, 4, content.jira_issue_no, style_body)
        sheet_uat.write(row, 5, str(content.create_user), style_body)
        sheet_uat.write(row, 6, str(content.change_date + timedelta(hours=8)), style_body)

        # 第一行加宽
        sheet_uat.col(0).width = 100 * 50
        sheet_uat.col(1).width = 200 * 50
        sheet_uat.col(2).width = 50 * 50
        sheet_uat.col(3).width = 50 * 50
        sheet_uat.col(4).width = 200 * 50
        sheet_uat.col(5).width = 50 * 50
        sheet_uat.col(6).width = 200 * 50
        row += 1

    output = StringIO.StringIO()
    wb.save(output)
    output.seek(0)
    response.write(output.getvalue())
    return response

在django里用xlwt作EXCEL导出功能的更多相关文章

  1. 使用NPOI实现简单的Excel导出功能

    [1]NPOI是啥? NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. POI是一个开源的Java读写Excel. ...

  2. Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

    Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...

  3. 用SpringMvc实现Excel导出功能

    以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...

  4. 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

    我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...

  5. excel导出功能优化

    先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...

  6. excel导出功能原型

    本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...

  7. java利用EasyPoi实现Excel导出功能

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

  8. asp.net excel导出功能

    以下是我在项目开发中所做的关于Excel导出功能,不足之处还望大家指正,相互学习 protected void btn_Export_Click(object sender, EventArgs e) ...

  9. Delphi实现带有格式的Excel导出功能

    功能预览 运行预览 模板样式 存储返参 导出的Excel 2. 代码实现 //执行sql的函数 procedure TForm1.GetReportData(astrsql:string); var ...

随机推荐

  1. E20170706-sl

    erode    vt.     侵蚀,腐蚀 vi.     逐渐毁坏; 削弱,损害; thin  adj.     薄的; 瘦的; 细的; 稀少的; laptop  n.     便携式电脑;

  2. Is the Information Reliable?(差分约束系统)

    http://poj.org/problem?id=2983 题意:给出M条信息,判断这些信息的正确性.(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的 ...

  3. 9.2NOIP模拟题

    9.2 NOIP模拟 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out elephant.in move.in 时间限 ...

  4. [Swift通天遁地]五、高级扩展-(9)颜色、设备、UserDefaults、URL等扩展方法

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. 【翻译】- EffectiveAkka-第二章(一)

    Actor使用模式 现在我们已经了解了可以创建的actor系统的不同类型,那么我们在编写基于actor的应用程序时,可以采用什么样的使用模式,以便避免出现常见错误呢? 下面就让我们看看其中使用模式. ...

  6. 【洛谷4158/BZOJ1296】[SCOI2009]粉刷匠(动态规划)

    题目:洛谷4158 分析: 这题一看就是动态规划. 可以看出,如果每个木条粉刷的次数是固定的,那么这些木条是互不干扰的,因此对于每个木条可以通过dp来求出把T次中的j次分配给这个木条时可以获得的最大正 ...

  7. c# regex Match Matches MatchCollection 用法

    string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080"; Reg ...

  8. Leetcode03---Longest Substring Without Repeating Characters

    Description: Given a string, find the length of the longest substring without repeating characters. ...

  9. CxImage实现9PNG

    CxImage* ScaleImageBy9PNG(CxImage *pRawImage, int nDstWidth,int nDstHeight) { if(NULL == pRawImage) ...

  10. webpack 打包后 Uncaught SyntaxError: Unexpected token <

    问题描述:npm run dev 没报错.是可以正常运行的, npm run build 过程也没报错, 但是打开dist   index.html  就报错了  错误内容:       解决方法: ...