Django上传并读取Excel

根据预定模板,将内容填写到Excel后上传,绝对比手动操作效率高很多。这里记录一下使用Django编写上传Excel并读取的步骤。另外小于2.5M的文件,Django都是在内存中读取,本文不包括保存Excel到服务器内容。

本文采用的例子是:上传一份试卷

代码涉及到知识点:Bootstrap前端界面Ajax与Django通信xlrd读取Excel

1. 需求描述

系统添加试卷上传导入功能,上传保存着整张试卷结构Excel后,可以读取并保存。

试卷大概是这个三级存储结构,章节存着试卷的id,试题存着章节的id。

2. 设计的Excel格式如下:说明:下图模板中第二行,章节数量需要要等于最后的章节序号,程序通过章节数量计算出章节的结束行,进而计算出试题的起始行。

3. 上传html模板设计讲解

1. 这里请注意,Form必须有multipart/form-data;

2. 不用试图去显示上传路径,出去安全原因会变成fakepath,然后会费劲的寻找fakepath的解决办法,fakepath变实际路径,其实不显示路径,也没啥损失;

3. 不要问我csrf_token 是什么鬼,重点看Bootstrap布局。

4. 浏览按钮js

5. 定义url映射

url(r’^import_paper/$’, views.import_paper, name=’ImportPaper’),

6. Ajax调用方法

上传有好多方法,用自己最熟悉的Ajax方法,挂接btn_import_paper的click函数,通过Ajax调用 ImportPaper函数。关键语句已标红。

7. View中读取Excel

讲解:

1. JS中的append到Form的paper_file,通过request.FILES.get(‘paper_file’)读取出来;

2. 使用xlrd读取Excel,取得所有行列,根据行列取得值用cell_value,wb实例用完记得释放一下内存。

3. 循环用for x in range(sec_start_line,sec_end_line): 循环包括sec_start_line, 不包括sec_end_line

4. 读取后内容存储到数据库代码与本文无关所以去掉了,根据每人根据自己情况存储即可。

8. 效果图

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181221G1L6JK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券