【问题标题】:Checking an Excel document into SharePoint programmatically hangs以编程方式将 Excel 文档签入 SharePoint 挂起
【发布时间】:2015-04-12 00:26:22
【问题描述】:

我一直在编写 PowerShell 脚本,目的是每天通过任务计划程序刷新 Excel 文档的 SQL 数据。 Excel 文档托管在 SharePoint 上。我已经(经过多次反复试验)让它工作起来,直到签入部分。

  • 基本上,任务计划程序每天都会触发 PowerShell 脚本。
  • 该脚本创建一个 Excel COM 对象。
  • 它会验证它是否可以签出文档,然后如果可以签出的话。
  • 然后执行刷新。
  • 最后,它会尝试签入文档。此时,它只是 手,什么也没有发生。我应该注意,这只发生在 脚本通过任务调度程序运行,'无论用户是否登录或 不'被选中。如果从 PowerShell cmd 行或 选中“用户必须登录”选项,一切正常 很好。

几个重要的注意事项- 该帐户是服务帐户用户,尽管我们在测试期间授予它本地登录权限。但在实践中必须无人看管。 我按照此页面上的文件夹说明进行操作- https://social.technet.microsoft.com/Forums/en-US/aede572b-4c1f-4729-bc9d-899fed5fad02/run-powershell-script-as-scheduled-task-that-uses-excel-com-object?forum=winserverpowershell 值得注意的是,我还必须对最初评论之后提到的几篇帖子中提到的文件夹设置权限。我强烈怀疑我当前的问题是相似/相关的——但一定不是这些文件夹,因为我在这里拥有相当开放的权限。

我不得不删除“增强的 IE 安全性”,因为这是一个服务器盒,PowerShell 最初无法“看到”SharePoint 网站。

我已经检查了事件日志-办公室日志显然是可操作的,但在签入时显然没有弹出窗口。

我已经设置并验证了 COM 权限设置,尽管我可能在这里遗漏了一些东西。 Excel 未在 APP 列表中列出,但将用户添加到呼叫权限使我在任务上前进。

如果我以开发管理员身份运行它,我很确定不会发生这种情况。

CYA- 我知道 MS 不认可上述内容,但我也知道人们可以让它发挥作用。 目前,Powerpivot for SharePoint 并不是一个真正的选择。 这就像我有史以来的第三个问题(我通常会用头撞墙,直到我得到它,但我在这里“只是”一个 PowerShell 脚本有点血腥。如果我过于罗嗦/过于罗嗦,请多多包涵:)

下面的截断脚本-(删除了 try/catch 和调试消息。如果您想要清理后的完整消息,请告诉我,我很乐意为别人省去我遇到的麻烦。)

$i = "http://supersecretintranetsite/excelwithsqldatacon.xlsx"


# Creating the excel COM Object 
$Excel = New-Object -ComObject Excel.Application; 

Start-Sleep -s 5
# Setting up Excel to run without UI and without alerts
$Excel.DisplayAlerts = $false 
$Excel.ScreenUpdating = $false 
$Excel.Visible = $false 
$Excel.UserControl = $false 
$Excel.Interactive = $false


If ($Excel.workbooks.CanCheckOut($i))
{

    # Opening the workbook, can be local path or SharePoint URL
    $Workbook = $Excel.workbooks.Open($i);      

    # Perform the check out
    $Workbook = $Excel.workbooks.CheckOut($i)   
    $Workbook = $Excel.workbooks.Open($i);

    Start-Sleep -s 15

    # Calling the refresh
    $Workbook.RefreshAll();

    # Forces a hold until all Refreshing is done
    $Excel.CalculateUntilAsyncQueriesDone()

    # Saving and closing the workbook
    # $Workbook.Save() #- this hangs too
    Start-Sleep -s 15
    # THIS HANGS
    $Workbook.CheckInWithVersion();

    Start-Sleep -sec 5

    #Release Workbook
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook)
}   

$Excel.quit();

【问题讨论】:

    标签: excel powershell sharepoint


    【解决方案1】:

    原来是更多的文件夹权限。 我将该用户的完全控制权限添加到 \windows*\config\systemprofile 文件夹中的 Appdata 文件夹,并且它起作用了。 我已经分配了读/写,但我想这还不够。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多