当前位置:   article > 正文

django实现读取数据导出生成excel表格_django 如何把model的数据变成excel

django 如何把model的数据变成excel

目录

一、简单示例:

1.创建文件对象:

2.添加工作表:

3.写入数据:

二、实践出真理


需要先安装xlwt模块

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

一、简单示例:

  1. import xlwt
  2. # 创建一个Excel文件对象
  3. workbook = xlwt.Workbook()
  4. # 添加一个工作表
  5. worksheet = workbook.add_sheet('Sheet1')
  6. # 写入表头
  7. worksheet.write(0, 0, '姓名')
  8. worksheet.write(0, 1, '年龄')
  9. worksheet.write(0, 2, '性别')
  10. # 写入数据
  11. data = [
  12. {'name': '张三', 'age': 18, 'gender': '男'},
  13. {'name': '李四', 'age': 20, 'gender': '女'},
  14. {'name': '王五', 'age': 22, 'gender': '男'},
  15. ]
  16. for index, item in enumerate(data):
  17. worksheet.write(index+1, 0, item['name'])
  18. worksheet.write(index+1, 1, item['age'])
  19. worksheet.write(index+1, 2, item['gender'])
  20. # 保存Excel文件
  21. workbook.save('example.xlsx')

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

1.创建文件对象:

xlwt.Workbook()

2.添加工作表:

workbook.add_sheet('Sheet1')

3.写入数据:

worksheet.write(0, 0, '姓名'

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

生成的excel表格内容如下:

二、实践出真理

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

views.py

  1. from django.views.generic import View
  2. import xlwt
  3. class ExportExcel(View):
  4. def post(self, request):
  5. try:
  6. # 创建一个Excel文件对象
  7. workbook = xlwt.Workbook(encoding='utf-8')
  8. # 添加一个工作表
  9. worksheet = workbook.add_sheet('Sheet1')
  10. # 写入表头
  11. worksheet.write(0, 0, '序号')
  12. worksheet.write(0, 1, '所属学校')
  13. worksheet.write(0, 2, '学校代码')
  14. worksheet.write(0, 3, '课程名称')
  15. worksheet.write(0, 4, '课程编码')
  16. worksheet.write(0, 5, '课程类别')
  17. worksheet.write(0, 6, '课程专家')
  18. worksheet.write(0, 7, '院校性质')
  19. # 查询数据库
  20. lectures = ArtEducationLecture.objects.all()
  21. # 遍历读取数据并写入
  22. for index, lecture in enumerate(lectures):
  23. worksheet.write(index+1, 0, index+1)
  24. if lecture.colleges:
  25. worksheet.write(index + 1, 1, lecture.colleges.school_name)
  26. worksheet.write(index + 1, 2, lecture.colleges.username)
  27. worksheet.write(index + 1, 7, "艺术" if lecture.colleges.is_artmajor else "非艺术")
  28. if lecture.category:
  29. worksheet.write(index + 1, 5, lecture.category.name)
  30. worksheet.write(index + 1, 3, lecture.lecture_name)
  31. worksheet.write(index + 1, 4, lecture.YK_code)
  32. if lecture.expert:
  33. experts = lecture.expert.all()
  34. expert_list = [expert.name for expert in experts]
  35. expert = ','.join(expert_list)
  36. worksheet.write(index + 1, 6, expert)
  37. except Exception as e:
  38. return JsonResponse({'status': 1, 'msg': '导出失败:' + str(e)})
  39. workbook.save('2023课程汇总表.xlsx')
  40. return JsonResponse({'status': 0, 'msg': '导出成功'})

urls.py

  1. from django.views.decorators.csrf import csrf_exempt
  2. url("^export_excel/$", csrf_exempt(admin_views.ExportExcel.as_view())), # 导出优课信息

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

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验证

生成的表格内容如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/494086
推荐阅读
相关标签
  

闽ICP备14008679号