РЕДАКТИРОВАТЬ: Добавлен упрощенный сценарий и шаги для воспроизведения в конце вопроса.Обратите внимание, что цель состоит в том, чтобы включить внешний скрипт в Excel-Desktop, а не заставить упрощенный сценарий работать другими способами.
Мы все знаем и любим акциипример цены для пользовательских функций, где актуальная цена акций запрашивается у источника с помощью 'fetch':
https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows#create-a-custom-function-that-requests-data-from-the-web
Если для получения цен на акции был внешний API,это также может быть использовано?Например:
Stock Price Source
| <----------- API knows how to get the stock price
External Stock Price API Javascript Library
| <----------- javascript function calls here
customfunctions.js
|
Excel
Иными словами, может ли проект JavaScript с пользовательскими функциями включать внешний скрипт, например
<script type="text/javascript" src="https://example.com/stock-price-api.js />
Я пытался включить такую ссылку в индекс html проекта пользовательских функций.файл, включающий URL-адрес сценария в манифесте в AllFormFactors / ExtensionPoint для «xsi: type = CustomFunctions», добавил ссылку на сценарий в «Resources / bt: Urls» и различные их комбинации, но сценарий не выглядит как «известны самим пользовательским функциям (HTML-файл индекса при загрузке в браузер знает о скрипте, поэтому я знаю, что ссылка верна).Все, что я пробовал, - это работа с догадками, потому что я не нашел никакой документации относительно использования внешних API.Я пытаюсь заставить это работать для Excel на рабочем столе Windows (64-разрядная версия).
Можно ли это сделать?
РЕДАКТИРОВАНИЕ / ОБНОВЛЕНИЕ: только что подтвердил, что он работает нормально для Excel Online, просто включив внешний скрипт в файл index.html примера проекта.Это предназначено для работы в Excel Desktop?
Чтобы воспроизвести проблему:
Следуйте учебному руководству для создания проекта основных пользовательских функций (с использованием опции машинописного текста)) и убедитесь, что они работают (https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows)
Создайте файл javascript «globalapi.js» и поместите его в папку «dist / win32 / ship» (та же папка, которая содержит пользовательскую функцию).javascript). Просто объявите глобальную переменную в файле «globalapi.js» следующим образом:
var someGlobalString = 'This is a global string';
Включите скрипт «globalapi.js» в файл «index.html»; все включенные сценарии:
<script src="https://officedev.github.io/custom-functions/lib/custom-functions-runtime.js" type="text/javascript"></script>
<script src="dist/win32/ship/globalapi.js" type="text/javascript"></script>
<script src="dist/win32/ship/index.win32.bundle" type="text/javascript"></script>
Измените функцию «add» в файле «customfunctions.ts», чтобы она возвращала что-то другое, если определено «someGlobalString»:
declare var someGlobalString: any;
function add(first: number, second: number): number {
if (typeof someGlobalString !== 'undefined') {
return 99999;
}
return first + second;
}
Теперь введите пользовательскую функцию '= CONTOSO.ADD (1,2)' в ячейку в Excel. Для Excel Desktop (началось с 'npm run sideload') результатв ячейке отображается «3», для Excel Online (после загрузки человекаесли есть) результат «99999».
Чем можно объяснить разницу?