在Sharepoint环境中使用Microsoft.Office.Interop.Word

时间:2018-09-07 15:04:46

标签: c# sharepoint interop office-interop

您将不得不原谅我对此代码的无知。我已经编写了一些代码来修改事件接收器。我已经为SharePoint建立了一个开发环境,最后使它可以访问和更改代码的某些元素。

但是,它在以下行中失败了:

Word.Application wordApp = new Word.Application();

在这种情况下,似乎无法打开安装在Sharepoint服务器上的本地Word应用程序来处理上载的文档。有关如何使SharePoint环境中的Word应用程序作为事件接收器启动的任何提示。

为完整起见,下面提供了完整的代码

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
using Word = Microsoft.Office.Interop.Word;


namespace chrisclementen.chrisclementen
{

public class chrisclementen : SPItemEventReceiver
{
    /// <summary>
    /// An item was added.
    /// </summary>
    public override void ItemAdded(SPItemEventProperties properties)
    {
        base.ItemAdded(properties);
        commentscheck(properties);
    }


     private void commentscheck(SPItemEventProperties properties)
    {

        bool commentsorrevisions = false;

        SPListItem item = properties.ListItem;
        SPFile file = item.File;
        if (properties.AfterUrl.EndsWith("docx"))
            {

                commentsorrevisions = WordCommentsChecker(file, properties);

            }


     }
     private static bool WordCommentsChecker(SPFile file, SPItemEventProperties properties)
{

    bool outcome = false;

    Word.Application wordApp = new Word.Application();
    properties.ListItem["Title"] = "bextor";
    properties.ListItem.Update();
    Word.Document document = wordApp.Documents.Open(file);
    int commentscount = document.Comments.Count;
    int revisionscount = document.Revisions.Count;

    if (commentscount != 0 || revisionscount != 0)
    {
        Console.WriteLine("comments");
        document.ActiveWindow.Close();
        wordApp.Application.Quit(-1);
        outcome = true;

    }

    else
    {
        Console.WriteLine("No Comments.");
        document.ActiveWindow.Close();
        wordApp.Application.Quit(-1);
        outcome = false;
    }

    return outcome;
}
    /// <summary>
    /// An item was updated.
    /// </summary>
    public override void ItemUpdated(SPItemEventProperties properties)
    {
        commentscheck(properties);
    }
}
}

1 个答案:

答案 0 :(得分:1)

  

关于如何在SharePoint环境中启用Word应用程序作为事件接收器的任何提示?

不。您不应在服务器进程(无头)中使用Word(用户的桌面应用程序)。 Microsoft明确指出,这可能会并且会产生问题,就像您现在正在经历的那样。

来自Considerations for server-side Automation of Office

  

Microsoft当前不建议并且不支持从任何无人参与的非交互客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT Services)自动化Microsoft Office应用程序,因为Office可能表现出不稳定在这种环境中运行Office时的行为和/或死锁。

就是这样。您应该寻找另一种读取或写入Word文档的方式。有许多库可以做到这一点。