django实现读取数据导出生成excel表格

news/2024/9/6 6:08:35 标签: django, python

目录

一、简单示例:

1.创建文件对象:

2.添加工作表:

3.写入数据:

二、实践出真理


需要先安装xlwt模块

python">pip install -i https://pypi.douban.com/simple xlwt

一、简单示例:

python">import xlwt

# 创建一个Excel文件对象
workbook = xlwt.Workbook()

# 添加一个工作表
worksheet = workbook.add_sheet('Sheet1')

# 写入表头
worksheet.write(0, 0, '姓名') 
worksheet.write(0, 1, '年龄')
worksheet.write(0, 2, '性别')

# 写入数据
data = [
    {'name': '张三', 'age': 18, 'gender': '男'},
    {'name': '李四', 'age': 20, 'gender': '女'},
    {'name': '王五', 'age': 22, 'gender': '男'},
]

for index, item in enumerate(data):
    worksheet.write(index+1, 0, item['name'])
    worksheet.write(index+1, 1, item['age'])
    worksheet.write(index+1, 2, item['gender'])

# 保存Excel文件
workbook.save('example.xlsx')

以下代码分为以下几个步骤:

1.创建文件对象:

python">xlwt.Workbook()

2.添加工作表:

python">workbook.add_sheet('Sheet1')

3.写入数据:

python">worksheet.write(0, 0, '姓名') 

write方法共三个参数:write(行坐标,列坐标,数据)

生成的excel表格内容如下:

二、实践出真理

所以依照上面的示例使用django读取数据库数据并写入到excel表格中

views.py

python">from django.views.generic import View
import xlwt
class ExportExcel(View):
    def post(self, request):
        try:
            # 创建一个Excel文件对象
            workbook = xlwt.Workbook(encoding='utf-8')
            # 添加一个工作表
            worksheet = workbook.add_sheet('Sheet1')
            # 写入表头
            worksheet.write(0, 0, '序号')
            worksheet.write(0, 1, '所属学校')
            worksheet.write(0, 2, '学校代码')
            worksheet.write(0, 3, '课程名称')
            worksheet.write(0, 4, '课程编码')
            worksheet.write(0, 5, '课程类别')
            worksheet.write(0, 6, '课程专家')
            worksheet.write(0, 7, '院校性质')

            # 查询数据库
            lectures = ArtEducationLecture.objects.all()

            # 遍历读取数据并写入
            for index, lecture in enumerate(lectures):
                worksheet.write(index+1, 0, index+1)
                if lecture.colleges:
                    worksheet.write(index + 1, 1, lecture.colleges.school_name)
                    worksheet.write(index + 1, 2, lecture.colleges.username)
                    worksheet.write(index + 1, 7, "艺术" if lecture.colleges.is_artmajor else "非艺术")
                if lecture.category:
                    worksheet.write(index + 1, 5, lecture.category.name)
                worksheet.write(index + 1, 3, lecture.lecture_name)
                worksheet.write(index + 1, 4, lecture.YK_code)
                if lecture.expert:
                    experts = lecture.expert.all()
                    expert_list = [expert.name for expert in experts]
                    expert = ','.join(expert_list)
                    worksheet.write(index + 1, 6, expert)
        except Exception as e:
            return JsonResponse({'status': 1, 'msg': '导出失败:' + str(e)})

        workbook.save('2023课程汇总表.xlsx')
        return JsonResponse({'status': 0, 'msg': '导出成功'})

urls.py

python">from django.views.decorators.csrf import csrf_exempt

url("^export_excel/$", csrf_exempt(admin_views.ExportExcel.as_view())),  # 导出优课信息

以上代码,先是使用xlwt.Workbook(encoding='utf-8')创建了表格对象,编码是utf-8,如果不指定可能在写入数据时报以下错误:

python">UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

接下来查询数据库表内容lectures = ArtEducationLecture.objects.all(),遍历读取字段内容并写入excel表格中

路由url使用csrf_exempt跳过csrf验证

生成的表格内容如下:


http://www.niftyadmin.cn/n/414504.html

相关文章

从零开始 Spring Boot 36:注入集合

从零开始 Spring Boot 36:注入集合 图源:简书 (jianshu.com) 在前面一篇文章从零开始 Spring Boot 27:IoC中,讨论过依赖注入集合(Java 容器)的内容,这里更深入地讨论注入集合的相关内容。 我们…

TLE4250-2G-ASEMI代理英飞凌汽车芯片TLE4250-2G

编辑:ll TLE4250-2G-ASEMI代理英飞凌汽车芯片TLE4250-2G 型号:TLE4250-2G 品牌:Infineon(英飞凌) 封装:SCT-595-5 特性:驱动芯片、汽车芯片 温度范围-40C~150C 最大输入电压:-42 V~45 V TLE4250-2G…

调用电商API你不得不知道的几件事

随着电商市场的迅速发展,越来越多的商家选择通过电商平台进行销售。为了达到更好的销售效果,许多商家开始尝试使用电商API。但是在使用电商API之前,商家需要了解一些必要的事情,以确保正常调用API并减少可能的风险。 本文将从以下…

【计算机组成与体系结构Ⅰ】知识点整理

第一章 计算机系统概论 1.1 从源文件到可执行文件 .c源程序、.i源程序、.s汇编语言程序、.o可重定位目标程序、可执行目标程序;后两个为二进制,前面为文本 1.2 可执行文件的启动和执行 冯诺依曼结构计算机模型的5大基本部件:运算器、控制…

vue 虚拟列表的实现

Vue 虚拟列表是一种用于优化大型列表的渲染性能的技术。它通过只渲染可见部分的列表项,以及通过动态添加和删除DOM元素的方式来减少DOM操作,从而提高应用程序的响应速度和性能。Vue 虚拟列表的实现依赖于一些关键技术,包括虚拟滚动、缓存池和…

Python学习41:文本分析(1)——统计文件中的字符

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ open(name[, mode[, bufferi…

java代码的freemarker模板将JSP页面转换成word文档导出

使用java代码的freemarker模板将JSP页面转换成word文档导出 使用java代码的freemarker模板将JSP页面转换成word文档导出 一、准备好freemarker模板, 我的模板是这样的 需要特别注意的是,这些名字的写法是很特殊的,这个模板是wps在进行word…

小议C++函数签名与模板返回类型

题记&#xff1a;什么事情都要追问一个为什么&#xff0c;真正理解了为什么&#xff0c;才能活学活用。 代码1 下面的代码能编译通过吗&#xff1f; #include <stdio.h> #include <stdlib.h>class X { public:int *get() { return new int(); }double *get() { r…