从 Windows 通用应用与 Office 集成

您可以将 Windows 通用应用程序平台第三方应用程序与 Excel Mobile、PowerPoint Mobile 和 Word Mobile 集成。 通用应用程序将通过 Windows 文件选取器合约expando 属性缓存文件更新程序合约与 Office 应用程序集成在一起。

当您将通用应用程序与 Excel、PowerPoint 或 Word Mobile 集成在一起时,您的用户在 Office 中浏览或在使用 Windows 打开您的应用程序中的文件时,他们可以打开您的应用程序提供的 Office 文档。 用户还可以将文件保存回可将文件上载到您的服务的通用应用程序。

这种方式打开的文件会显示在 Office 中的最近列表中,因此您的用户可以轻松地查找并重新打开这些文件。

这种集成要求您的通用应用程序:

  • 实施 Windows 文件选取器合同

  • 表示文件存储(例如,允许访问云存储的应用程序)。

Expando 属性

Windows 通用应用程序可以使用 Expando 属性沟通与文件相关联的其他信息。 有关如何在 Windows 中工作的信息,请参阅 StorageItemContentProperties.SavePropertiesAsync 中的"System.ExpandoProperties"。

下表介绍了您的应用程序需要向 Office 提供的属性,以支持文件打开方案。 如果未提供此信息,您的应用程序中的所有文件将以只读模式打开。 用户能否打开文件进行编辑取决于其拥有的 Office 许可证类型以及其尝试打开的文档类型。

System.ExpandoProperties 属性集中设置这些属性。

属性 说明 类型 示例
AppDisplayName
向用户显示的提供程序名称。 将出现在 Office 中的多个位置,如最近的文档列表。 String
Contoso
MicrosoftOfficeOwnershipType
对于许可,则表示文档/位置是个人/使用者还是工作/企业。 允许值为 1(个人)和 2(企业)。 例如,如果用户的文件存储在 Contoso Business 中,则可使用值"2"来表示企业。 Unit32
1 或 2
例如,如果用户的文件存储在 Contoso Business 中,则应将此文件标记为"2"来表示企业。
MicrosoftOfficeTermsOfUse
声明您提供的信息准确对应于每条使用条款的法律文本。 此文本不向用户进行显示。 它是在您、应用程序供应商和 Microsoft 之间拟定的协议。 有关示例,请参阅以下内容。 String
我同意 https://go.microsoft.com/fwlink/p/?LinkId=528381 中的条款

以下代码示例演示如何设置这些属性。

public static async Task SetExpandoProperties(StorageFile file,... other params ...) 
  { 
     var expandoProperties = new PropertySet(); 
     expandoProperties.Add("AppDisplayName", "Contoso",);  
     // String value. 
     expandoProperties.Add("MicrosoftOfficeOwnershipType", 1);  
     // Unit32 value - 1 (for personal), 2 (for business).  
     expandoProperties.Add("MicrosoftOfficeTermsOfUse", "I agree to the terms located at https://go.microsoft.com/fwlink/p/?LinkId=528381");   
    // String value. 
          
       var fileProperties = new PropertySet(); 
       fileProperties.Add("System.ExpandoProperties", expandoProperties); 
       await file.Properties.SavePropertiesAsync(fileProperties); 
  } 

缓存的文件更新程序合约

如果在缓存文件更新程序合约中加入您的通用应用程序,则它将收到对文件更改了另一个通用应用程序(如 Office)的通知。 有关如何在 Windows 中工作的信息,请参阅 CachedFileUpdater 类

Office 使用 AllowOnlyReaders 选项打开您的通用应用程序通过文件选取器合约提供的读写文件。 这意味着,当文件在 Office 中打开时,该文件不能被移动、删除、重命名,或通过其他(包括您自己的)应用程序来写入。 Office 将自动保存文件,但将 CachedFileManager.DeferUpdates 设置为在 Office 关闭文档之前阻止激活您的应用程序,否则(当用户切换到另一个应用程序时)Office 会被 Windows 挂起 。 当 Office 关闭该文件时,您的应用程序可以对其进行写入。

您的应用程序必须处理与您的服务进行的所有通信,包括下载、刷新和上载。

下表列出了设置用来在您的应用程序和 Office 之间处理交互的参数。

参数 说明
ReadActivationMode
设置 BeforeAccess 以允许您的应用程序更新该文件,然后再将它发送到 Office。
WriteActivationMode
设置 ReadOnly 使文件处于只读状态。 设置 AfterWrite 以确保使用该文件完成 Office 操作时,CacheFileUpdater 将触发您的应用程序。

注意:如果不设置 AfterWrite,你的应用就不会收到上载更改的通知,这意味着用户的更改将只是一些本地更改。
CachedFileOptions.RequireUpdateOnAccess
设置此属性以确保当用户从最近列表中访问文件时,您的应用程序可以更新该文件。

从您的应用程序调用 Office

当用户从您的应用程序打开 Office 文档时,该文档可以在 Excel Mobile、PowerPoint Mobile 和 Word Mobile 中打开。 例如,当用户在应用中选择 *.docx 文件时,Word Mobile启动并打开了 *.docx 文件。 打开哪个 Office 应用程序依据的是用户将文件类型与哪个应用程序相关联。

若要在 Office 中打开您的应用程序中的文件,建议您使用 LaunchFileAsync() 启动该文件。 不建议您使用 LaunchUriAsync() 启动该文件,因为这将导致为 URI 方案注册的应用程序会启动(浏览器) 而不是 Office。 尽管 LaunchUriAsync() 带有 LauncherOptions.ContentType() 选项,可以调用 Office,但在这种情况下,打开的文件被标记为临时,并且在 Office 中是只读状态。

有关详细信息,请参阅启动器类

临时和只读文件

在您的应用程序中,对临时文件设置 FILE_ATTRIBUTE_TEMPORARY 属性,对只读文件设置 FILE_ATTRIBUTE_READONLY 属性。

具有 FILE_ATTRIBUTE_TEMPORARYFILE_ATTRIBUTE_READONLY 属性的文件设置为,在 Office 中以只读方式打开。 FILE_ATTRIBUTE_TEMPORARY 还会阻止该文件显示在最近列表中。

有关文件属性的详细信息,请参阅 SetFileAttributes 函数

其他最佳做法

为了优化文件的一致性,例如,冲突编辑或错误发生时,应用以下最佳实践:

  • 阻止保存冲突。

    • 发生服务器冲突时,暂停上载以避免分叉(分叉仅出现在 Office 不再打开写入文件时)。 通常情况下,如果您的应用程序中的文件在 Office 中打开,则仅在 Office 关闭或被 Windows 挂起时,才会激活您的应用程序。

    • 如果你需要 UI 来处理冲突,请使用 toast 通知。 挂起 Office 时,完整 UI 不可用。

  • 处理错误。

    • 当锁定解除时,会通知用户发生冲突,并提供在您的应用程序中解决此问题的路径。

另请参阅