excel Python和HTTP触发器在转换为base64或保存到临时文件夹后不返回工作簿

yzuktlbb  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(162)

我们正在尝试使用azure http触发器的func.httpResponse返回openpyxl的工作簿。在此之前,我们需要将其转换为Bytes或byteArray。
文件的类型为openpyxl.workbook.workbook.Workbook()
最好的方法是使用tempfile.NamedTemporaryFile。在研究documentations时,我们做了以下工作:

tempFilePath = tempfile.gettempdir()
fp = tempfile.NamedTemporaryFile()
customizedFile.save(fp)
filesDirListInTemp = listdir(tempFilePath)

我们的工作簿是customizedFile
我们无法检索文件及其路径,以便使用该路径上传到blob存储中。
我们试过这个:

with NamedTemporaryFile(mode='w') as tmp:
    customizedFile.save(tmp.name)
    output = io.BytesIO(tmp)
    return func.HttpResponse(output, status_code=200)

但是,我们得到了以下错误:
应为str、bytes或os。PathLike对象,而不是Workbook
我们尝试了几个选项,如转换为base64,但它不工作,因为错误是脚本预期的字节或byteArray不是工作簿:

file_stream = io.BytesIO()
file =open(customizedFile, 'rb')
file.save(file_stream)
file_stream.seek(0)
base64_data = base64.b64encode(file_stream.getvalue()).decode('utf-8')

错误:
应为str、bytes或os。PathLike对象,而不是Workbook
如何将工作簿上传到触发器目录中的临时文件夹中,将其转换为字节并返回HTTP响应?

mpgws1up

mpgws1up1#

我发现了如下的解决方案:

wb = workbook.Workbook()
wb = customizedFile
virtual_workbook = io.BytesIO()
wb.save(virtual_workbook)
logging.warn('Workbook saved to virtual_workbook.')
return func.HttpResponse (
    virtual_workbook.getvalue(),
    mimetype='application/octet-stream',
    headers={
    'Content-Disposition': 'attachment;filename=' + customizedFileName}
)

相关问题