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

如何在Azure生态中用openpyxl加载Blob Storage的Excel工作簿

解决Azure Blob Storage中Excel文件加载到openpyxl的问题

核心问题

load_workbook的filename参数不支持直接传入Blob的普通URL或StorageStreamDownloader对象:

  • 普通Blob URL默认无访问权限,会触发FileNotFoundError
  • StorageStreamDownloader是Azure SDK的专属对象,不符合load_workbook要求的字符串、字节或路径类对象类型,导致TypeError

可行解决方案

方案1:内存中通过字节流加载(推荐)

利用io.BytesIO将Blob的二进制内容包装为类文件对象,直接供load_workbook读取,全程无需本地存储:

import io
from openpyxl import load_workbook
from azure.storage.blob import BlobServiceClient

# 初始化客户端
conn_str = "abc123"
container_name = "a_container"
xl_blob_name = "a_xl"

blob_service_client = BlobServiceClient.from_connection_string(conn_str)
container_client = blob_service_client.get_container_client(container_name)

# 读取Blob内容并转为类文件对象
download_blob = container_client.download_blob(xl_blob_name)
blob_byte_stream = io.BytesIO(download_blob.readall())

# 加载工作簿
workbook = load_workbook(filename=blob_byte_stream)

方案2:使用SAS URL加载

如果有权限生成Blob的SAS(共享访问签名)URL,可直接将带权限的SAS URL传入load_workbook:

from openpyxl import load_workbook
from azure.storage.blob import BlobServiceClient, generate_blob_sas, BlobSasPermissions
from datetime import datetime, timedelta

conn_str = "abc123"
container_name = "a_container"
xl_blob_name = "a_xl"

# 初始化客户端
blob_service_client = BlobServiceClient.from_connection_string(conn_str)
blob_client = blob_service_client.get_blob_client(container=container_name, blob=xl_blob_name)

# 生成有效期1小时的SAS令牌
sas_token = generate_blob_sas(
    account_name=blob_service_client.account_name,
    container_name=container_name,
    blob_name=xl_blob_name,
    account_key=blob_service_client.credential.account_key,
    permission=BlobSasPermissions(read=True),
    expiry=datetime.utcnow() + timedelta(hours=1)
)
sas_url = f"{blob_client.url}?{sas_token}"

# 通过SAS URL加载工作簿
workbook = load_workbook(filename=sas_url)

说明

两种方案均在Azure生态内完成操作,无需依赖本地内存之外的存储。方案1无需额外权限配置,适用性更广;方案2适合需要共享链接的场景。

内容的提问来源于stack exchange,提问作者fritz.ann165

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:33:25