如何判断一个Office Add-in是Excel下的运行还是Excel在线?

How to determine if an Office Add-in is running under Excel or Excel Online?

我正在编写 Office 加载项(以前称为 Apps for Office)。我正在使用 office.js 并且在某些代码点我想检查该应用程序是 excel(桌面软件)中的 运行 还是网络上的 运行(Excel在线)

类似于:

if (Office.IsRunningOnWeb){
    // Do something.
}

您可以使用文档类型:

if (Microsoft.Office.WebExtension.context.document instanceof OSF.DDA.ExcelWebAppDocument) {
                                    //Your app running on the web
                                }

if (Microsoft.Office.WebExtension.context.document instanceof OSF.DDA.ExcelDocument) {
                                    //Your app running in excel
                                }

@Mehrandvd,如果我可能会问,你需要这种区别是为了什么(例如,基于知道你在 Excel 在线与桌面,你会做什么不同)?我在 Office.js API 工作,所以如果你能提供一些具体细节,我很乐意将你的反馈反馈给我的团队。

如果您需要这种区别来进行特征检测,我建议您通过新的(但向后移植到所有端点)API、[=10= 检查 API 要求集].请在 .

查看我的回答

如果是由于您在 Excel 桌面版与在线版本之间看到的一些 API 差异,目标是 API 在端点上表现相同,所以这可能是一个错误。如果你告诉我具体情况,我可以跟进。

回复。 @Afshin 提到的答案 - 它可能有效,但请注意它不是 public API 而是你正在测试的内部工作原理,所以这种方法有可能会停止在未来工作......唯一的 publically-exposed 命名空间是 Office(并且,与 new Excel and Word APIs released in Sept. 2015,还有 ExcelWordOfficeExtension).

希望对您有所帮助!

~ Michael Zlatkovsky

Office 可扩展性团队的开发人员,MSFT

PS:以后此类问题请使用office-js标签;这是 Microsoft 的 Office 可扩展性团队积极关注的 Whosebug 标签。

问题是你怎么做,而不是你为什么要这样做。您可能想要与众不同的原因有很多。按如下方式输入此支票:

if (window.top == window) {
//the add-in is not running in Excel Online
}
else
{
//the add-in is running in Excel online
}

Sturb的回答启发,以下内容适用于ExcelApi 1.10 & 1.12

if (window.top.window == window) {
  // Add-in is running in Excel desktop
} else {
  // Add-in is running in Excel online
}