Как включить внешний JavaScript для использования в пользовательских функциях Excel?
РЕДАКТИРОВАТЬ: Добавлен упрощенный сценарий и шаги для воспроизведения в конце вопроса. Обратите внимание, что цель состоит в том, чтобы включить внешний скрипт в Excel-Desktop, а не заставить упрощенный сценарий работать другими способами.
Мы все знаем и любим пример цены акций для пользовательских функций, где актуальная цена акций запрашивается у источника с помощью 'fetch':
Если бы существовал внешний 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'.
Чем можно объяснить разницу?
1 ответ
Извините, сейчас есть ошибка в последней сборке Windows с веб-запросами в сборке Windows 16.0.11406.20002.
https://github.com/OfficeDev/Excel-Custom-Functions/issues/115
Мы обновим эту проблему, как только следующая сборка появится на канале Insiders.
Спасибо!