使用CSOM直接从SharePoint路径打开文件

时间:2018-01-24 15:42:50

标签: c# sharepoint csom

我有一台SharePoint服务器,我想从带有SharePoint CSOM的服务器直接打开文件

用户点击按钮 - >使用标准软件在客户端计算机上打开文件(Excel,Word,...)。

直接意味着,如果我将某些内容更改为文件并单击“保存”,则该文件将直接保存在SharePoint服务器上(或者如果我单击“例如”并在Excel中保存为'建议的路径为& #39; https://sharpoint.url.com/folder'。)

其实我有:

using Microsoft.SharePoint.Client;

var clientContext = new ClientContext("https://sharpoint.url.com");
string relativePath = "/folder/file.xls";
clientContext.Credentials = CredentialCache.DefaultCredentials;
var file = clientContext.Web.GetFileByServerRelativeUrl(relativePath);

clientContext.Load(file);
clientContext.ExecuteQuery();

如果我想直接打开文件(无需下载),我现在该怎么办?

2 个答案:

答案 0 :(得分:0)

我们可以为SharePoint库创建Map Network Drive,并从网络位置打开该文件。查看以下文章:

http://support.sherweb.com/Faqs/Show/how-to-connect-to-a-sharepoint-site-using-webdav-sharepoint-2013

或者我们可以从SharePoint下载文件并使用以下代码打开它:

Application.Workbooks.Open(@"C:\Test\YourWorkbook.xlsx");

参考:https://msdn.microsoft.com/en-us/library/b3k79a5x.aspx

答案 1 :(得分:0)

我假设您询问如何访问文件的流而不是将其下载到本地文件夹。

您可以使用File.OpenBinaryDirect方法访问其ETag和流,例如:

using(var fileInfo=File.OpenBinaryDirect(clientContext,"/folder/file.xls"))
using(var reader=new StreamReader(fileInfo.Stream))
{
    //Do whatever you want with the data
}

顺便说一下,你不应该使用旧的xls文件。该格式已弃用超过10年。当前的Excel格式xlsx是一个压缩的XML文件包,它本身支持更好,不需要Excel生成或读取。

例如,如果您想从xlsx文件中读取单元格值,可以使用流行的EPPlus库直接从流中读取:

using(var fileInfo=File.OpenBinaryDirect(clientContext,"/folder/file.xlsx"))
using(var package=new ExcelPackage(fileInfo.Stream))
{
    var sheet=package.Workbook.Worksheets[0];
    var value=ws.Cells["A1"].Value;
    //...
}

<强>更新

似乎这个问题毕竟与编程无关。保存或打开SharePoint文档所需的只是单击文档的链接。然后会发生什么取决于站点和文档库级别的Open Documents in Client Applications设置。

这会影响服务器在用户单击文档链接时发送到浏览器的标头。 浏览器仍可拒绝打开已注册的应用程序并显示Save对话框。

如果这不起作用,您应该检查为什么而不是编写代码。这可能是配置错误或浏览器设置。解决它比创建变通方法更容易,将它们推送到所有客户端计算机。然后跟踪所有补丁,部署它们并部署新补丁。

除此之外,Office应用程序自2003年以来就了解SharePoint和文档库。他们可以浏览它们,显示文档的 SharePoint 属性,显示协作者等。

正如我在问题评论中提到的,人们认为“SharePoint Developoment”的很多只不过是配置,管理和最终用户功能。

MSDN文档也没有帮助 - 它们实际上会因为不涵盖SP管理或解释功能及其使用方式而造成伤害。你会在Technet中找到它。多年来,人们在代码中创建了webparts以改变网格的外观,因为MSDN没有解释DataViewWebPart的工作方式或者如何从UI设置网格样式。

一般来说,这类问题的最佳位置是http://sharepoint.stackexchange.com。例如,选中“Open in the client application” Vs “Use the server default (Open in the client application)” inside the document library advance settings