如何使用PowerShell或Python编写Azure Runbook读写追加Azure Blob存储的Excel文件
前置准备
- 确保Azure Automation账户已启用系统分配托管身份,且给该托管身份分配目标存储账户的存储Blob数据参与者权限
- PowerShell版Runbook需提前导入Automation模块:
Az.Storage、ImportExcel - Python版Runbook需提前在Automation Python包中安装依赖:
azure-storage-blob、openpyxl(注意匹配Runbook的Python版本)
PowerShell 版实现
核心逻辑分为身份认证、下载Excel到临时空间、编辑Excel、回传存储账户四个步骤,代码示例如下:
# 1. 用托管身份登录Azure Connect-AzAccount -Identity | Out-Null # 2. 配置参数 $storageAccountName = "你的存储账户名" $containerName = "你的容器名" $blobName = "目标Excel文件名.xlsx" $tempPath = Join-Path $env:TEMP $blobName # 3. 从存储账户下载Excel到临时路径 $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount Get-AzStorageBlobContent -Container $containerName -Blob $blobName -Destination $tempPath -Context $storageContext -Force # 4. 编辑Excel内容 # 4.1 读取Excel $excelData = Import-Excel -Path $tempPath # 4.2 示例:修改第一行的Name列值 $excelData[0].Name = "修改后的内容" # 4.3 示例:追加新行 $newRow = [PSCustomObject]@{ Name = "新用户" Age = 28 Department = "研发部" } $excelData += $newRow # 4.4 保存修改后的Excel $excelData | Export-Excel -Path $tempPath -ClearSheet # 5. 回传到存储账户覆盖原文件 Set-AzStorageBlobContent -File $tempPath -Container $containerName -Blob $blobName -Context $storageContext -Force # 清理临时文件 Remove-Item $tempPath -Force
Python 版实现
核心逻辑和PowerShell版一致,依赖openpyxl处理Excel、azure-storage-blob操作存储,代码示例如下:
import os import tempfile from azure.identity import DefaultAzureCredential from azure.storage.blob import BlobServiceClient from openpyxl import load_workbook # 1. 配置参数 STORAGE_ACCOUNT_NAME = "你的存储账户名" CONTAINER_NAME = "你的容器名" BLOB_NAME = "目标Excel文件名.xlsx" # 国内云用core.chinacloudapi.cn,国际公有云换为core.windows.net STORAGE_ACCOUNT_URL = f"https://{STORAGE_ACCOUNT_NAME}.blob.core.chinacloudapi.cn" # 2. 初始化Blob客户端,用托管身份认证 credential = DefaultAzureCredential() blob_service_client = BlobServiceClient(account_url=STORAGE_ACCOUNT_URL, credential=credential) blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=BLOB_NAME) # 3. 下载Excel到临时文件 with tempfile.NamedTemporaryFile(suffix=".xlsx", delete=False) as temp_file: temp_path = temp_file.name blob_data = blob_client.download_blob() blob_data.readinto(temp_file) # 4. 编辑Excel内容 wb = load_workbook(temp_path) ws = wb.active # 操作默认工作表,也可以用wb["工作表名"]指定 # 4.1 示例:修改A1单元格内容 ws["A1"] = "修改后的表头" # 4.2 示例:追加新行 new_row = ["新用户", 28, "研发部"] ws.append(new_row) # 4.3 保存修改 wb.save(temp_path) wb.close() # 5. 回传到存储账户覆盖原文件 with open(temp_path, "rb") as data: blob_client.upload_blob(data, overwrite=True) # 清理临时文件 os.unlink(temp_path)
注意事项
- Azure Runbook的临时存储空间最大为1GB,处理超过该大小的Excel文件需拆分操作
- 如果需要避免误覆盖原文件,可以开启存储账户的Blob版本控制/快照功能,上传前先创建快照
- 上述代码仅支持xlsx格式的Excel文件,若处理xls格式需要更换为对应适配的处理库
内容的提问来源于stack exchange,提问作者Samuel Mamootil
相关产品推荐
相关产品推荐

