无法在Office Online和Office 2016之间共享文档设置

时间:2017-04-20 14:10:40

标签: office-js

我们正在开发使用Settings.setSettings.get方法在文档中存储信息的Word加载项。

问题可以在以下场景中描述:

  • 在桌面上创建新的Word文档,并通过Settings.set
  • 保存数据
  • 将该文档放入OneDrive
  • 文档将在Office Online中同步并打开它
  • 无法通过Settings.get
  • 获取存储的数据

我在两个客户端都使用相同的清单。我在“设置”页面上看过:

  

使用Settings对象的方法创建的设置将按加载项和每个文档保存。也就是说,它们仅适用于创建它们的加载项,并且只能从保存它们的文档中使用。

我已经通过Yeoman创建了示例加载项来演示此问题。请在此处查看:https://github.com/Vj3k0/onedrive-test/

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

Settings.set方法仅影响内存中的设置。完成对“设置”的所有更改后,您需要调用Settings.saveAsync方法来保留它们。

此外,在从设置中读取之前,您应该使用Settings.refreshAsync将它们重新水化到内存中。

使用您的示例,我做了以下更改:

  Office.context.document.settings.refreshAsync(function () {

    var foo = Office.context.document.settings.get('hello');
    if (!foo) {
      Office.context.document.settings.set('hello', 'world');
      Office.context.document.settings.saveAsync(function (asyncResult) {
        $('#content').append('Settings saved with status: ' + asyncResult.status);
      });
    }
    else {
      $('#content').append('Value found: ' + foo);
    }

  });

我在GitHub上发布了一个工作示例:Word-Settings-Sample

关于舱单装载的另外一个注意事项。作为Juan covers in his answer,要准确测试跨平台,您需要集中部署加载项。我个人的偏好是使用O365开发者租户和Central Deployment来实现此目的。您可以通过Microsoft Office 365 Developer Program免费获取此内容。

答案 1 :(得分:2)

根据每个文档的加载项实例存储Office.js设置。这意味着,例如,如果您在Excel中插入多个内容加载项,则每个加载项都将拥有自己的一组设置。 (最终是不同的加载项实例)

在某些情况下,任务窗格加载项也可能会发生这种情况,这取决于您如何测试它。如果您在Word Online中加载一个清单,每次插入时都会在文件格式中使用不同的ID,当然,ID将与使用文件共享在Win32中插入的加载项不同,只是由事实上它来自不同的商店。如果您在每次插入任务窗格加载项时打开分析文件格式(ooxml),您将看到加载项的PK是它来自的商店加上ID。 (是什么使加载项实例唯一)

如果您使用的是SharePoint目录或商店,您将获得相同的实例ID和存储,并且设置将按预期工作。如果您想测试多平台,我建议您使用我们的公司部署进行测试,或将其作为预览发送到商店。

检查此文件格式示例:它使用插入对话框的sideloading功能在Online中插入相同的任务窗格:(注意同一存储类型的id如何不同,因此设置将保存在不同的实例中)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<we:webextension id="f3984fd0-d21e-45a5-9353-942c4e1e3535" xmlns:we="http://schemas.microsoft.com/office/webextensions/webextension/2010/11">
    <we:reference id="42e27db6-2647-4c5a-83b3-80056035d6f8" version="1.0" store="developer" storeType="uploadfiledevcatalog" />
    <we:alternateReferences />
    <we:properties />
    <we:bindings />
    <we:snapshot xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />
</we:webextension>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<we:webextension id="1e14b918-3b58-48f2-a102-51da5c594251" xmlns:we="http://schemas.microsoft.com/office/webextensions/webextension/2010/11">
    <we:reference id="78e27db6-2647-4c5a-83b3-80056035d6f8" version="1.0" store="developer" storeType="uploadfiledevcatalog" />
    <we:alternateReferences />
    <we:properties />
    <we:bindings />
    <we:snapshot xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />
</we:webextension>