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

如何将openpyxl修改后的内存Excel工作簿通过requests上传?

问题原因

你的代码存在两个核心问题:

  1. 直接调用wb.save(name)会把文件写入本地磁盘,不符合不允许本地存储的要求;
  2. requests的files参数接收的是类文件对象/字节内容,你直接传入openpyxl的Workbook实例,类型不匹配触发报错。
修复方案

所有操作全程在内存中完成,不涉及本地磁盘读写,修改后的代码如下:

import io
import requests
import openpyxl as opx
from openpyxl.workbook.protection import WorkbookProtection

def UploadXLS(name, xlsx):
    # 从输入的字节流加载工作簿
    wb = opx.load_workbook(io.BytesIO(xlsx))     
    # 配置工作簿保护规则
    wb.security = WorkbookProtection(workbookPassword = 'super-secret-password', lockStructure = True)
    # 新建内存缓冲区存储修改后的Excel
    output_buf = io.BytesIO()
    # 把修改后的工作簿写入内存缓冲区,不存本地
    wb.save(output_buf)
    # 重置缓冲区指针到开头,避免后续读取得到空内容
    output_buf.seek(0)

    # 构造符合要求的上传参数,注意files为字典结构,键需和后端接收文件的字段名一致
    r = requests.post(
        'my-url-here', 
        files = {"file": (name, output_buf, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")}
    )
    return r.url
关键改动说明
  • 全程用BytesIO做内存中转,完全规避本地文件存储,符合你的限制要求
  • 新增seek(0)操作,修正工作簿写入缓冲区后指针在末尾的问题
  • 按照requests规则构造files参数,同时指定Excel对应的MIME类型,避免服务端识别文件格式错误

内容的提问来源于stack exchange,提问作者N L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:01