利用django如何解析用户上传的excel文件

发布时间 - 2026-01-11 02:29:22    点击率:

前言

我们在工作中的时候,会有这种需求:用户上传一个格式固定excel表格到网站上,然后程序负债解析内容并进行处理。我最近在工作中就遇到了,所以想着将解决的过程总结分享出来,方便大家参考学习,下面话不多说,来一起看看详细的介绍:

举一个简单的栗子,比如我们有这样一个HTML:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 </head>
 <body>
 <p>上传EXCEL表格</p>
 <form class="" action="" method="post" enctype="multipart/form-data" >
  {% csrf_token %}
  <input type="file" name="excel">
  <input type="submit" value="上传">
 </form>
 </body>
</html>

forms.py文件内容如下,编写一个简单的判断后缀的验证:

# coding=utf-8
from django import forms
from django.utils.translation import gettext as _
from django.core.exceptions import ValidationError
def validate_excel(value):
 if value.name.split('.')[-1] not in ['xls','xlsx']:
 raise ValidationError(_('Invalid File Type: %(value)s'),params={'value': value},)
class UploadExcelForm(forms.Form):
 excel = forms.FileField(validators=[validate_excel]) #这里使用自定义的验证

处理excel表格我这里使用xlrd库,使用pip安装即可。此时处理POST请求时有2种方法:

  • 将用户上传的excel存储到磁盘中再读取交给xlrd处理。
  • 直接在内存中读取用户上传的excel读取交给xlrd处理。

这里我使用第二个办法——在不修改django默认settings.py配置情况下,用户上传的文件其实是InMemoryUploadedFile类型,这个类型有一个read()方法,所以views.py中可以内存直接读取内容而不用写磁盘再读取了:

def post(self, request, *args, **kwargs):
 form = UploadExcelForm(request.POST, request.FILES)
 if form.is_valid():
 wb = xlrd.open_workbook(
  filename=None, file_contents=request.FILES['excel'].read()) # 关键点在于这里
 table = wb.sheets()[0]
 row = table.nrows
 for i in xrange(1, row):
  col = table.row_values(i)
  print col
 return HttpResponse("ok")

其他文件类型同理,如果不需要保存用户上传的文件到硬盘其实都可以这么处理。这里记录2个和django处理excel有关的资源:

  • django-excel (本地下载)判断用户excel格式的三方库
  • https://assist-software.net/blog/how-export-excel-files-python-django-application 讲解如何导出excel的文章

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# django  # 解析excel文件  # django读取excel文件  # django上传excel文件  # Django 实现图片上传和下载功能  # Django实现图片上传功能步骤解析  # 在django中图片上传的格式校验及大小方法  # django mysql数据库及图片上传接口详解  # Django 实现图片上传和显示过程详解  # Django框架文件上传与自定义图片上传路径、上传文件名操作分析  # django将图片上传数据库后在前端显式的方法  # Django后台获取前端post上传的文件方法  # Python+django实现文件上传  # django实现图片上传数据库并显示  # 上传  # 在工作中  # 会有  # 本地下载  # 不需要  # 第二个  # 这样一个  # 自定义  # 种方法  # 这篇文章  # 谢谢大家  # 多说  # 三方  # 有一个  # 再读  # 中再  # 情况下  # 有疑问  # def  # csrf_token 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在香港服务器上快速搭建免备案网站?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  智能起名网站制作软件有哪些,制作logo的软件?  如何在七牛云存储上搭建网站并设置自定义域名?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何快速登录WAP自助建站平台?  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何用AI帮你把自己的生活经历写成一个有趣的故事?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  零基础网站服务器架设实战:轻量应用与域名解析配置指南  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Android滚轮选择时间控件使用详解  JavaScript如何实现继承_有哪些常用方法  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  简单实现jsp分页  Firefox Developer Edition开发者版本入口  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  再谈Python中的字符串与字符编码(推荐)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何在万网主机上快速搭建网站?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  WordPress 子目录安装中正确处理脚本路径的完整指南  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何在宝塔面板中创建新站点?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Android Socket接口实现即时通讯实例代码  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何在阿里云域名上完成建站全流程?  Laravel怎么在Blade中安全地输出原始HTML内容  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  简单实现Android文件上传  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  在Oracle关闭情况下如何修改spfile的参数  ,南京靠谱的征婚网站?