tengke 发表于 2023-7-25 15:04:56

openpyxl 打开文件报错 大佬麻烦看看

from openpyxl import load_workbook
def zzzz(request):
    # if request.method == "GET":
    #   return render(request, "zi.html")
    fff = request.FILES.get("aaa")
    print(type(fff))
    wb = load_workbook(fff)
    print(wb)
    she = wb.worksheets
    print("she",she)
    cell = she.cell(1,1)
    print(cell)
    return render(request, "zi.html")
报错截图


大佬麻烦看看这个

isdkz 发表于 2023-7-25 15:04:57

看起来路径没传对,传了一个None类型,也就是你的请求中没有名字为 aaa 的 files

Mike_python小 发表于 2023-7-25 17:38:26


from openpyxl import load_workbook
def zzzz(request):
    # if request.method == "GET":
    #   return render(request, "zi.html")
    fff = request.FILES.get("aaa")
    print(type(fff))
    wb = load_workbook(fff)
    print(wb)
    she = wb.worksheets
    print("she",she)
    cell = she.cell(1,1)
    print(cell)
    return render(request, "zi.html")

isdkz 发表于 2023-7-25 18:22:39

你的错误显示为TypeError:expected str,bytes or os.PathLike object,not NoneType ,这个错误说明load_workbook函数尝试接收一个字符串、字节或 os.PathLike 对象,但是它接收到的是 None。

从你的代码来看,你是用request.FILES.get("aaa")尝试获取上传的文件。错误可能出在这里, request.FILES.get("aaa")可能返回了 None,也就是说它没有成功地获取到文件。因此当你尝试用load_workbook打开这个文件时,它实际上在尝试打开一个 None,这就导致了你看到的错误。

为了解决这个问题,你需要确保你在request.FILES中确实有一个名为 "aaa" 的文件。你可以通过以下方式检查:

def zzzz(request):
    if 'aaa' not in request.FILES:
      print("No file uploaded with name 'aaa'")
      return render(request, "zi.html")

    fff = request.FILES.get("aaa")
    print(type(fff))
    wb = load_workbook(fff)
    print(wb)
    she = wb.worksheets
    print("she",she)
    cell = she.cell(1,1)
    print(cell)
    return render(request, "zi.html")


上述代码会先检查request.FILES中是否包含一个名为 "aaa" 的文件,如果没有,就会打印一个错误信息并返回。

另外,根据 openpyxl 的文档, load_workbook函数接受一个文件名字符串作为参数。如果你试图直接传入文件对象,可能会导致问题。你可能需要先将文件保存到磁盘上,然后传入文件名,或者尝试读取文件的内容然后使用 BytesIO 对象。

比如你可以试试这样的方式:

import io
from openpyxl import load_workbook

def zzzz(request):
    if 'aaa' not in request.FILES:
      print("No file uploaded with name 'aaa'")
      return render(request, "zi.html")

    fff = request.FILES.get("aaa")
    file_content = fff.read()
    wb = load_workbook(filename=io.BytesIO(file_content))
    print(wb)
    she = wb.worksheets
    print("she",she)
    cell = she.cell(1,1)
    print(cell)
    return render(request, "zi.html")


上述代码会先从上传的文件中读取所有的内容,然后用BytesIO创建一个类文件对象,并将这个对象传递给load_workbook函数。
页: [1]
查看完整版本: openpyxl 打开文件报错 大佬麻烦看看