能否通过PowerShell直接在SharePoint文件夹创建Excel文档?
当然可行!你完全不用先在本地创建Excel再上传,直接在SharePoint的目标文件夹里生成新文档是可以实现的。下面我给你两种实用方案,你可以根据自己的环境来选择:
方案一:使用PnP PowerShell + EPPlus(推荐,操作更简洁)
这个方案借助PnP PowerShell的文件上传能力,配合EPPlus库在内存中生成Excel内容,直接推送到SharePoint,全程不需要本地保存文件。
步骤:
- 先安装所需模块(如果还没装的话):
Install-Module -Name PnP.PowerShell -Scope CurrentUser Install-Module -Name EPPlus -Scope CurrentUser - 运行以下脚本创建Excel文档:
# 导入模块 Import-Module PnP.PowerShell Import-Module EPPlus # 连接到你的SharePoint站点(会弹出登录窗口) Connect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yoursite" -Interactive # 定义目标文件夹和文件名 $targetFolder = "/sites/yoursite/Shared Documents/YourTargetFolder" # 替换成你的文件夹相对路径 $newFileName = "DirectCreatedExcel.xlsx" # 在内存中创建Excel文档(可以添加初始内容) $memoryStream = New-Object System.IO.MemoryStream $excelPackage = New-Object OfficeOpenXml.ExcelPackage($memoryStream) $worksheet = $excelPackage.Workbook.Worksheets.Add("Sheet1") # 可选:添加表头或测试内容 $worksheet.Cells["A1"].Value = "序号" $worksheet.Cells["B1"].Value = "内容" $excelPackage.Save() $memoryStream.Position = 0 # 重置流位置到开头 # 直接上传到SharePoint目标文件夹 Add-PnPFile -Folder $targetFolder -FileName $newFileName -Stream $memoryStream # 清理资源 $memoryStream.Dispose() $excelPackage.Dispose()
方案二:使用SharePoint REST API(无需PnP模块)
如果你不想依赖PnP模块,可以直接调用SharePoint的REST API来实现同样的效果,核心思路还是在内存生成Excel流后通过API上传。
步骤:
- 安装EPPlus模块(用于内存生成Excel):
Install-Module -Name EPPlus -Scope CurrentUser - 运行以下脚本:
Import-Module EPPlus # 连接站点并获取访问令牌 Connect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yoursite" -Interactive $accessToken = Get-PnPAccessToken # 配置参数 $siteUrl = "https://yourtenant.sharepoint.com/sites/yoursite" $folderRelativeUrl = "/sites/yoursite/Shared Documents/YourTargetFolder" $newFileName = "RESTCreatedExcel.xlsx" # 内存中创建Excel $memoryStream = New-Object System.IO.MemoryStream $excelPackage = New-Object OfficeOpenXml.ExcelPackage($memoryStream) $excelPackage.Workbook.Worksheets.Add("Sheet1") $excelPackage.Save() $memoryStream.Position = 0 $fileBytes = [byte[]]::new($memoryStream.Length) $memoryStream.Read($fileBytes, 0, $memoryStream.Length) # 发送REST请求上传文件 $restEndpoint = "$siteUrl/_api/web/getfolderbyserverrelativeurl('$folderRelativeUrl')/files/add(overwrite=true, url='$newFileName')" Invoke-RestMethod -Uri $restEndpoint -Headers @{ "Authorization" = "Bearer $accessToken" "Accept" = "application/json;odata=verbose" } -Method Post -Body $fileBytes -ContentType "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" # 清理资源 $memoryStream.Dispose() $excelPackage.Dispose()
注意事项:
- 确保你的账号拥有目标SharePoint文件夹的编辑权限,否则会上传失败
- 如果是SharePoint本地服务器(On-Premises),需要调整认证方式(比如改用
-UseWebLogin或者NTLM认证) - EPPlus支持PowerShell 5.1和PowerShell 7,兼容性没问题
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

