使用请求发布通过 openpyxl 修改的 excel 工作簿

Posting an excel workbook modified through openpyxl using request

我有一个 excel sheet 我写在内存上的,我想用 openpyxl 修改。由于一些情况,我不能使用临时文件或任何类似的东西。我也在写原始的 sheet 不使用 openpyxl,而是 xlsxwriter,原因我不想详细说明。然而,原始 sheet 以类似字节的格式保存,所以我想知道我是否可以对修改后的 excel sheet 做同样的事情,然后使用请求上传它。

这是我使用的代码:

def UploadXLS(name, xlsx):
   wb = opx.load_workbook(io.BytesIO(xlsx))     
   wb.security = WorkbookProtection(workbookPassword = 'super-secret-password', lockStructure = True)
   wb.save(name)

   r = requests.post('my-url-here', 
                      files = wb)
return r.url

这是我收到的(可预测的)错误消息:

a bytes-like object is required, not 'Workbook'

如能提供有关该主题的任何帮助或建议,我们将不胜感激。

这里的问题是您试图将 openpyxl Workbook 对象传递给 post() 请求。但是,post() 不知道如何处理 Workbook。但它确实 知道如何处理任何通用文件流。所以解决办法是打开文件,把流传给请求:

file = open(name, 'r')
r = requests.post('url', files=file)