如何使用office.js查找Office AddIn Host,确定它是Word应用程序还是Excel?

7

我正在创建一个办公室插件,可以在Excel和Word应用程序中使用,并根据所在的宿主(Word或Excel)执行不同的逻辑。我正在使用office.js来创建Office插件。

例如:

let say type="Excel" // after some logic executed 

if(type=="Excel")
 {
//run code for excel applications 
}
else
{
//run code for word applications
}

我尝试使用以下方法:-
 if (Office.context.requirements.isSetSupported('ExcelApi', '1.1')) {
            alert("yes it is excel");
        }

但是当我在Excel中运行它时,它无法正常工作。

我已经在清单文件中发送了主机信息。

 <Hosts>
     <Host Name="Document" />
    <Host Name="Workbook" />
  </Hosts>

我在进行大量搜索后发现以下代码,但它对我没有起作用。

function getHostInfo() {
    var _requirements = Office.context.requirements;
    var types = ['Excel', 'Word'];
    var minVersions = ['1.1', '1.0']; // Start with the highest version

    // Loop through types and minVersions
    for (var type in types) {
        for (var minVersion in minVersions) {

            // Append "Api" to the type for set name, i.e. "ExcelApi" or "WordApi"
            if (_requirements.isSetSupported(types[type] + 'Api', minVersions[minVersion])) {
                return {
                    type: types[type],
                    apiVersion: minVersions[minVersion]
                }
            }
        }
    }
};

谢谢你。

感谢您

3个回答

1
2016年12月5日更新:我们即将发布一个API,用于检测主机和平台信息(部分原因是因为人们非正式地依赖_host_info URL参数,最近需要从Office Online中移除)。我们还有一个临时解决方法,以期望官方API的推出。 请参见“在Excel Online中,OfficeJS API不再将host_Info_参数传递给Excel Add-In”获取更多信息。

请注意,对于许多点亮场景,您仍然最好使用API Set detection。请参见“获取环境(即Office版本)的好方法”获取有关要求集的更多信息。


if (Office.context.requirements.isSetSupported('ExcelApi', '1.1'))应该适用于您,如果您使用的是Excel 2016。在2013中它将无法工作(即返回false)。
如果您的目标是Office 2013,并且只需要针对Word和Excel的解决方案,则可以使用编写OpenXML的能力作为区分因素(Word可以,Excel不行)。因此,请检查Office.context.requirements.isSetSupported('OoxmlCoercion')。对于Word,它将返回true,对于Excel,它将返回false。

1
是的,它将在支持Office Add-ins的所有平台/版本上运行。 - Michael Zlatkovsky - Microsoft
1
你可以尝试使用CDN位置吗?或者将你的Office.js Nuget包更新到最新版本? - Michael Zlatkovsky - Microsoft
我已经尝试过CDN的 "https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js" 以及 "https://appsforoffice.microsoft.com/lib/1/hosted/Office.js",但两者都没有起作用。 - Pradeep Gaba
@MichaelZlatkovsky 在 addIn manifest 中,我已经写下了以下代码:<DefaultSettings>
<SourceLocation DefaultValue="http://localhost:12345/" /> </DefaultSettings> 这实际上是一个 MVC 应用程序的地址,其中包含所有逻辑,并且我正在将此 MVC 应用程序托管在插件中。该 MVC 应用程序正在使用 office.js,而且一切正常。但是,在需要确定主机的情况下,它却无法正常工作。今天,我创建了一个 Word 插件作为演示,并替换了演示插件清单中的上述代码,但条件仍然为 false :(
- Pradeep Gaba
你确定在本地主机上运行的代码(localhost:123456)是正确的吗?特别是,它是否指向CDN?并且它是否有Office.initialize?同样,提供示例代码(或链接到尽可能简单的项目的压缩文件)将会有所帮助。 - Michael Zlatkovsky - Microsoft
显示剩余14条评论

0

您可以随时检查location.search对象 - 应该返回一个字符串,例如?_host_Info=Word|Win32|16.01|en-US


1
我们正在评估添加一个API来检测宿主("Excel,Word,Outlook等)和平台(桌面,Mac,Web等)信息。为了确保我们考虑到了这一点,您介意描述一下导致您寻求_host_Info的特定用例吗?谢谢! - Michael Zlatkovsky - Microsoft

0

请注意,即将推出的 API 将提供正式的 API 来获取此类信息。

规范链接:https://github.com/OfficeDev/office-js-docs/tree/ContextAdditions_OpenSpec

这是一种更好的获取所需信息的方法,而不是依赖于 URL 查询字符串或会话存储。这些方法有些风险,因为底层行为可能会在没有警告的情况下发生变化。使用已发布的 API 总是一个不错的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接