以编程方式将Excel文档检入SharePoint会挂起

时间:2015-02-11 15:07:34

标签: excel powershell sharepoint

我一直在研究PowerShell脚本,目的是通过任务调度程序每天刷新excel文档的SQL数据。 excel文档托管在SharePoint上。我(经过多次试验和错误)让它一直工作到签到部分。

  • 基本上,Task Scheduler每天都会触发PowerShell脚本。
  • 该脚本创建一个excel COM对象。
  • 它验证它可以签出文件,然后如果能够的话就这样做。
  • 然后执行刷新。
  • 最后,它会尝试签入该文件。在这一点上,它只是 手没有任何反应。我应该注意到这只发生在 脚本通过任务调度程序运行,并且'用户是否已登录或 不是'被选中。如果从PowerShell cmd行或 选项'用户必须登录'已选中,一切正常 细。

结合重要的笔记 - 该帐户是服务帐户用户,但我们在测试期间授予了本地登录。但是GOT在实践中无人值守。 我按照本页面上的文件夹说明 - 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();

1 个答案:

答案 0 :(得分:0)

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