在桌面Word

时间:2016-12-20 14:21:12

标签: ms-word office365 onedrive microsoft-graph

我尝试使用ms-word协议从桌面版Word(我用我的Office 365帐户登录)中使用Office365的OneDrive打开文件进行编辑注意到有几种可能性:

  1. 有时文件在编辑模式下打开,我可以编辑文件并按Ctrl + S将其直接保存到OneDrive,而不会被提示进行任何其他操作。

  2. 有时文件在只读模式下打开,我可以切换到编辑模式,但是当我尝试保存文件时,我提示指定保存位置(默认位置是我的OneDrive目录,带有此文件)

  3. 有时Word会要求我登录我的Office365帐户(即使我已在Word中使用此帐户登录),然后以只读模式打开文件,之后看起来像第二种情况。

  4. 我想按照第一种情况所述打开它,这样用户就不必再做任何其他操作了。

    我目前的情况是:

    1. 用户调用API来创建文件。

    2. API使用Microsoft Graph在用户的OneDrive中创建文件。

    3. API将直接URL返回给文件,我使用ms-word协议在Word中打开此文件。

    4. 通过指向文件的直接网址,我的意思是:https://domain-my.sharepoint.com/personal/account/Documents/Apps/Microsoft Graph/appname/directoryname/filename.docx

      打开文件的URL如下所示: ms-word:ofe|u|<file path specified above>

      正如我在开头所描述的那样,有三种情况如何打开文件,它对我来说是随机的。

      我还注意到,当我在Word Online中打开我的文件(使用web url to file)然后我按下Word中的Edit时,它使用与我创建的完全相同的文件URL并返回给用户但是从此处文件总是打开第一个场景。

      当我使用ms-word协议手动打开文件时使用ms-word协议使用 Database db = null; Cursor cur = null; try { db = Display.getInstance().openOrCreate("MyDb.db"); if(query.getText().startsWith("select")) { cur = db.executeQuery(query.getText()); int columns = cur.getColumnCount(); frmMain.removeAll(); if(columns > 0) { boolean next = cur.next(); if(next) { ArrayList<String[]> data = new ArrayList<>(); String[] columnNames = new String[columns]; for(int iter = 0 ; iter < columns ; iter++) { columnNames[iter] = cur.getColumnName(iter); } while(next) { Row currentRow = cur.getRow(); String[] currentRowArray = new String[columns]; for(int iter = 0 ; iter < columns ; iter++) { currentRowArray[iter] = currentRow.getString(iter); } data.add(currentRowArray); next = cur.next(); } Object[][] arr = new Object[data.size()][]; data.toArray(arr); frmMain.add(BorderLayout.CENTER, new Table(new DefaultTableModel(columnNames, arr))); } else { frmMain.add(BorderLayout.CENTER, "Query returned no results"); } } else { frmMain.add(BorderLayout.CENTER, "Query returned no results"); } } else { db.execute(query.getText()); frmMain.add(BorderLayout.CENTER, "Query completed successfully"); } frmMain.revalidate(); } catch(IOException err) { frmMain.removeAll(); frmMain.add(BorderLayout.CENTER, "Error: " + err); frmMain.revalidate(); } finally { Util.cleanup(db); Util.cleanup(cur); } 协议使用完全相同的网址时,您是否有任何想法?

      我希望在用户无需编辑任何其他步骤并将文件保存回OneDrive的情况下,始终在桌面Word中打开来自用户OneDrive的文件。

2 个答案:

答案 0 :(得分:0)

(我没有声誉,所以我无法发表评论。我会再次尝试部分回答。)

总是有可能必须刷新凭据,因此无法完全阻止Office应用程序提示凭据,但它应该相对不常见。

关于在编辑模式与保护模式下打开的问题:有些文件会打开到受保护的视图中的原因有多种:https://support.office.com/en-us/article/What-is-Protected-View-d6f09ac7-e6b9-4495-8e43-2bbcdbcb6653

如果您有一个看似在编辑模式下打开的文件与某个版本的只读或受保护视图,请使用answers.microsoft.com,其中对话不必适合stackoverflow模型。

答案 1 :(得分:0)

  

当我在Word Online中打开我的文件(使用网址到文件),然后按Word中的编辑时,它使用完全相同的文件URL

您建议网址相同,但我首先想到的是,Word Online链接使用driveItem的webDavUrl属性而不是baseItem的webUrl可能有所不同。 https://docs.microsoft.com/en-us/onedrive/developer/rest-api/resources/driveitem#json-representation