情况:OneDrive for Business将文件从Sharepoint站点文档库同步到本地目录:
C:\Users\users\Sharepoint\Library\Test.pttx
但是使用PowerPoint InterOp:
presentation.Path
时:
https://company.sharepoint.com/Library/Shared%20Documents/
Sharepoint的正确路径是什么。
如何访问本地目录?
更新:我在MSDN上找到similar question但没有回答
答案 0 :(得分:2)
如果我理解正确,你想在Powerpoint(VSTO)中找到同步目录的本地路径吗? Powerpoint对象模型中的方法,如 presentation.GetLocalPath()?
我不知道为什么(在问题的MSDN link中)MSFT CSG工程师说这是不可能的。
对不起,经过进一步调查后,这是错误的 impossble。对于Word应用程序,该文件存储在 OneDrive和"离线"是OneDrive的缓存模式,它是 对Word应用程序透明(Word应用程序只知道它是一个 在OneDrive上的文档),所以当你检查打开的位置 文件,位置是" http:/d.docs.live.net/xxxx/xx.docx"宁 而不是" C:\ XXX \ XXX"。
本文向您展示了如何Change the location where you sync SharePoint libraries on your computer。显然,Powerpoint Interop库中没有一种方法,但它绝对可行。
1)我的第一个想法是查看OneDrive for Business同步应用程序向导是否保存任何注册表项或类似内容(使用ProcessMonitor),但它可能将本地目录存储在云中。
2)我的第二个想法是在框外,只需将文本文件放在https://company.sharepoint.com/Library/Shared%20Documents/LocalDrivePath.txt中,然后创建一个名为presentation.GetLocalPath()的扩展方法,并使用WebClient类下载字符串。
伪代码:
public string GetLocalPath(this Microsoft.Office.Interop.PowerPoint.Presentation presentation)
{
WebClient client = new WebClient();
string localPath = client.DownloadString(presentation.Path + "LocalDrivePath.txt");
//Some good old protective programming to quickly identify the problem if the file doesn't exist
if (!string.IsNullOrEmpty(localPath)) throw new Exception("Issue: LocalDrivePath.txt not found in " + presentation.Path + Environment.Newline + "Please add the file for this Office Documents' sync'd (offline) local folder to be identified.");
return localPath;
}
这样称呼:
presentation.GetLocalPath();
答案 1 :(得分:2)
根据此post,可以在此多字符串注册表值中查找已同步的文件夹:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common
\Internet\LocalSyncClientDiskLocation
鉴于您的本地路径和SharePoint URL看起来像
C:\Users\User\SharePoint\Library - Documents\Folder\SubFolder\Document.pptx
和
https://***.sharepoint.com/Library/Shared%20Documents/Folder/SubFolder/Document.pptx
,
您可以尝试从URL中提取本地部分Folder/SubFolder/Document.pptx
,将其添加到从注册表值检索的本地文件夹路径中,并检查文件是否存在。