You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django框架下如何获取上传Excel文件路径并读取指定单元格内容

Django 上传Excel文件读取单元格内容解决方案

错误原因

Django 中request.FILES返回的UploadedFile对象,默认仅当上传文件大小超过配置项FILE_UPLOAD_MAX_MEMORY_SIZE(默认值为2.5MB)时,才会写入磁盘临时文件,此时才存在temp_name属性;小于该阈值的文件会直接存储在内存中,不存在temp_name属性,因此触发报错。

最优解决方案:直接读取内存文件(无需获取本地路径)

xlrd的open_workbook方法支持直接传入文件二进制内容,无需将文件落盘,适配所有大小的上传文件,修改post方法代码如下:

def post(self, request, *args, **kwargs):
    message = ''
    ExcelFile = request.FILES['import_file']   
    # 直接读取上传文件二进制内容传入xlrd,无需获取本地路径
    wb = xlrd.open_workbook(file_contents=ExcelFile.read())
    sheet = wb.sheet_by_index(0)
    A1 = sheet.cell_value(0,0)                          
    return render(request, self.template_name, {"message":A1}) 

注意:若使用xlrd 2.0及以上版本,默认仅支持xls格式文件读取,如需读取xlsx格式,可降级到xlrd==1.2.0版本,或替换使用openpyxl库处理。

备选方案:强制获取文件本地路径

如果业务场景必须获取上传文件的本地磁盘路径,可通过写入临时文件的方式实现:

import tempfile
import os

def post(self, request, *args, **kwargs):
    message = ''
    ExcelFile = request.FILES['import_file']   
    # 创建临时文件写入上传内容
    with tempfile.NamedTemporaryFile(delete=False, suffix='.xlsx') as tmp_file:
        for chunk in ExcelFile.chunks():
            tmp_file.write(chunk)
        tmp_path = tmp_file.name
    # 读取临时文件内容
    wb = xlrd.open_workbook(tmp_path)
    sheet = wb.sheet_by_index(0)
    A1 = sheet.cell_value(0,0)
    # 用完删除临时文件,避免占用磁盘空间
    os.unlink(tmp_path)                       
    return render(request, self.template_name, {"message":A1}) 

内容的提问来源于stack exchange,提问作者Merrin K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:36:08