How to find the Office AddIn Host it is a Word app

2019-04-29 05:22发布

I am creating a office AddIn which works in both excel and word applications and based on host if it is a word or excel host i want to execute different logic. I am using office.js to create office Addin.

for example :-

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

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

I have tried to use the bellow:-

 if (Office.context.requirements.isSetSupported('ExcelApi', '1.1')) {
            alert("yes it is excel");
        }

but it is not working when i run it in excel.

I have sent the host in manifest file also

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

also I got some code alter doing a lot of googling I found the bellow code which is not working for me

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]
                }
            }
        }
    }
};

Thank you

3条回答
闹够了就滚
2楼-- · 2019-04-29 06:15

Update Dec 5, 2016: We will soon be releasing an API to detect the host and platform information (partially in response to the fact that the _host_info URL paramater, which folks had unofficially relied on, needed to be recently removed for Office Online). We also have a temporary workaround in anticipation of the forthcoming official API. See "In Excel Online, OfficeJS API is not passing the host_Info_ parameter anymore to Excel Add-In" for more info.

Note that for many light-up scenarios, you would still be better off using API Set detection. See "Neat ways to get environment (i.e. Office version)" for more information on requirement sets.


The if (Office.context.requirements.isSetSupported('ExcelApi', '1.1')) should work for you, IF you are in Excel 2016. It will not work (i.e., return false) in 2013.

If you are targeting Office 2013, and need a solution just for Word & Excel, you can use the ability to write OpenXML as a distinguishing factor (Word can, Excel can't). So check for Office.context.requirements.isSetSupported('OoxmlCoercion'). It will return true for Word, false for Excel.

查看更多
一纸荒年 Trace。
3楼-- · 2019-04-29 06:16

You can always inspect the location.search object - should return a string like ?_host_Info=Word|Win32|16.01|en-US.

查看更多
疯言疯语
4楼-- · 2019-04-29 06:21

Note the upcoming API that provides a formal API to get such information.

Specification link: https://github.com/OfficeDev/office-js-docs/tree/ContextAdditions_OpenSpec

This is a better way to get the information you are looking for rather than relying on URL query string or session storage. Such methods are bit risky as underlying behavior could change without warning. It is always a good option to use published APIs.

查看更多
登录 后发表回答