Sharepoint - 使用C#打开存储在Sharepoint文档库中的word doc文件

时间:2013-03-24 17:36:58

标签: c# sharepoint sharepoint-2010

我正在使用visual studio,C#进行编码。 如上所述,有什么方法可以打开存储在Sharepoint文档库中的word文件?只需要打开word文件供我阅读。不必编辑或删除。

我试过了: System.Diagnostics.Process.Start(“iexplore.exe”,url)但它似乎不起作用。

尝试以下代码。显示我的标签没问题。但doc这个词也不会发布。

protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = GridView1.Rows[index];
            this.Label1.Text = "You selected " + row.Cells[4].Text + ".";
            System.Diagnostics.Process.Start(@"C:\Users\Administrator\Desktop\Test\Test.docx");
        }  
    }

1 个答案:

答案 0 :(得分:2)

这可能比听起来要困难得多。如果您尝试从服务器端对象模型执行此操作,那么您很可能会在会话0中运行。会话0是一个特殊的Windows会话服务,它不允许产生新的过程。要解决这个问题,您必须使用Windows API登录用户,然后控制其会话,从而退出会话0。我不会再走这条路了,因为你没有说明你实际上是这样做的。

如果您只是想在SharePoint上下载存储在文档库中的word文档,然后在客户端启动它,则可以使用以下命令下载并打开该文档:

ClientContext clientContext = new ClientContext("http://SharePoint/");
string serverRelativeUrlOfFile = "SharedDocuments/file.docx";
string fileDestinationPath = @"C:\Documents\file.docx";

using (FileInformation sharePointFile =
    Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, serverRelativeUrlOfFile))
{
    using (Stream destFile = System.IO.File.OpenWrite(fileDestinationPath))
    {
        byte[] buffer = new byte[8 * 1024];
        int byteReadInLastRead;
        while ((byteReadInLastRead = sharePointFile.Stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            destFile.Write(buffer, 0, byteReadInLastRead);
        }
    }
}


System.Diagnostics.Process.Start(@"C:\Documents\file.docx");

编辑:注意,这使用SharePoint2010客户端对象模型,因为会话0隔离使服务器端对象模型的步骤变得更加困难,我不会在这里详细说明,除非它是请求。

编辑:在评论之后,很明显您正在尝试使用Webpart在客户端下载和执行文件。上面的代码来自SharePoint 2010客户端对象模型,但是来自C#版本。将它翻译成JavaScript版本应该是微不足道的,因为我已经向您展示了正确的C#版本。这会将文件下载到客户端。下载文件后,使用以下JavaScript / ActiveX执行该文件:

 var objShell = new ActiveXObject("Shell.Application");
 var strArguments = "";
 var strDirectory = "";
 var strOperation = "open";
 var intShow = 1;
 objShell.ShellExecute(FileLocation, strArguments, strDirectory, strOperation, intShow);

替换正确的参数。请注意,这只适用于Internet Explorer - 因为这个显然非常不安全的ActiveX被一些不太合适的浏览器阻止了 - 而且我只在IE8上测试过它。