Как определить, работает ли надстройка Office в Excel или Excel Online?

Я пишу надстройку Office (ранее Apps for Office). Я использую office.js и в какой-то части кода хочу проверить, работает ли приложение в Excel (программное обеспечение для настольных ПК) или в Интернете (Excel Online)

Что-то вроде:

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

person mehrandvd    schedule 01.06.2015    source источник


Ответы (4)


Вы можете использовать тип документа:

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
                                }
person Afshin Alizadeh    schedule 16.06.2015
comment
Больше не работает: OSF.DDA не имеет ключа с именем ExcelWebAppDocument, только ExcelDocument (то же самое для Word и PowerPoint). - person skozin; 02.05.2016
comment
@skozin Эй, что вы знаете, это то, что Mike'rosoft сказал! (Извините, Майк из Microsoft, не удержался от каламбура :) - person NH.; 10.07.2017

@Mehrandvd, если я могу спросить, для чего вам нужно это различие (например, что бы вы сделали по-другому, зная, что вы находитесь в Excel Online, а не на рабочем столе)? Я работаю над API-интерфейсами Office.js, поэтому я буду рад передать ваши отзывы моей команде, если вы можете сообщить некоторые подробности.

Если вам нужно это различие для обнаружения функций, я бы рекомендовал вместо этого проверять наборы требований API с помощью нового (но перенесенного на все конечные точки) API Office.context.requirements.isSetSupported(name, version). Пожалуйста, смотрите мой ответ в Аккуратные способы получить среду (т.е. офисная версия).

Если это связано с некоторыми различиями в API, которые вы видите между версиями Excel для настольных ПК и онлайн-версиями, цель состоит в том, чтобы API-интерфейсы вели себя одинаково на конечных точках, поэтому это может быть ошибкой. Если вы дадите мне знать подробности, я могу продолжить.

Ре. ответ, упомянутый @Afshin - он может работать, но просто имейте в виду, что это не общедоступный API, а внутренняя работа, с которой вы тестируете, поэтому есть вероятность, что этот подход перестанет работать в будущем... единственное общедоступное пространство имен — Office (а с учетом новых API-интерфейсов Excel и Word, выпущенных в сентябре 2015 г., а также Excel и Word и OfficeExtension).

Надеюсь это поможет!

~ Михаил Златковский

Разработчик в команде Office Extensibility, MSFT

PS: пожалуйста, используйте тег office-js для пометки подобных вопросов в будущем; это тег stackoverflow, на который активно смотрит группа Office Extensibility в Microsoft.

person Michael Zlatkovsky - Microsoft    schedule 30.09.2015
comment
Спасибо, Майкл. Поскольку этот вопрос немного устарел, я не помню точную ситуацию. Но, насколько я помню, это было из-за какого-то другого поведения (или ошибки, как вы сказали). Я думаю, что в режиме TableBinding порядок вызова событий DataChanged и SelectionChanged был разным для десктопа и веба. Если это поможет, я могу вернуться к этому проекту, чтобы раскрыть точную информацию, но? - person mehrandvd; 01.10.2015
comment
Без проблем. Но если вы снова обнаружите свою копию, не стесняйтесь начинать отдельную ветку, помеченную тегами office-js и excel, и мы (команда продукта) можем попросить кого-нибудь провести расследование. - person Michael Zlatkovsky - Microsoft; 02.10.2015
comment
Майкл, у меня есть пример, когда я хочу определить, работаю ли я в настольной версии Excel. Ваши отзывы приветствуются. См. -› stackoverflow.com/questions/33321407/ - person zumalifeguard; 24.10.2015
comment
@zumalifeguard, я полностью понимаю желание иметь нелипкие панели задач и передам их соответствующему менеджеру программы, отвечающему за возможности UX надстройки. Я менее убежден, что это истинный вариант использования для необходимости отличать рабочий стол от онлайн, поскольку это звучит из той другой темы, что вы действительно используете это только для обходного пути (и не может быть случаев, когда вы < i>хочет ли, чтобы надстройка работала и в настольном сценарии?). - person Michael Zlatkovsky - Microsoft; 26.10.2015
comment
@MichaelZlatkovsky, конечный пользователь видит эту функцию следующим образом: они заходят на сайт sharepoint, открывают пустую электронную таблицу с графикой, но без данных. они вставляют надстройку, заполняют несколько полей и получают новую таблицу, созданную с бизнес-данными. Теперь им нужна копия этого отчета, поэтому они сохраняют ее в виде файла Excel для дальнейшего использования. Когда отчет позже откроется другими людьми, мы не хотим, чтобы они имели доступ к надстройке. Возможно, у них даже нет лицензии на его использование. Нам действительно нужна надстройка ленты, такая как tfs или новый продукт Office Mix в PowerPoint. - person zumalifeguard; 27.10.2015
comment
@zumalifeguard, я хотел сказать не столько о том, что нельзя различать варианты использования, сколько о том, что, хотя в вашем сценарии сейчас верно, что пользователь приходит из SharePoint и, следовательно, попадает в Excel онлайн, различие ощущается как будто это может быть вещь на определенный момент времени (что, если пользователь сделал Открыть на рабочем столе из SharePoint?). Я думаю, что более общий запрос, который я полностью понимаю, состоит в том, чтобы иметь нелипкие панели задач и / или возможность экспортировать отчет. Я передам эти запросы/требования соответствующим людям. - person Michael Zlatkovsky - Microsoft; 27.10.2015
comment
@MichaelZlatkovsky API в Интернете и на рабочем столе не работает на 100% одинаково, например. window.open ведет себя по-разному на рабочем столе и в Интернете (и в Интернете по-разному между IE и Chrome...), поэтому мне может потребоваться реализовать разные подходы в зависимости от типа клиента. Наверное, поэтому был добавлен Office.context.mailbox.diagnostics? - person alek kowalczyk; 05.11.2016
comment
@alekkowalczyk, позвольте мне вернуть это команде для обсуждения. - person Michael Zlatkovsky - Microsoft; 12.11.2016
comment
Этот ответ бесполезен. Есть несколько функций, которые не задокументированы, например Office.context.ui.openBrowserWindow. На рабочем столе это и href открываются в браузере, но в Интернете это не работает, и hrefs открываются на панели вместо новой вкладки. Возможность явно проверить, находимся ли мы в офисе онлайн или нет, необходима для того, чтобы чертовы ссылки работали. - person Space Bear; 21.08.2020
comment
@SpaceBear, я больше не в команде расширения Office. Но вы должны иметь возможность использовать Office.context.platform API для того, что вам нужно. - person Michael Zlatkovsky - Microsoft; 21.08.2020

Вопрос в том, как вы это делаете, а не в том, зачем вам это нужно. Существует множество причин, по которым вы можете захотеть выделиться. Вставьте этот чек следующим образом:

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

Вдохновленный ответом 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
}
person Alex Monkey    schedule 30.10.2020