Как включить внешний JavaScript для использования в пользовательских функциях Excel?

РЕДАКТИРОВАТЬ: Добавлен упрощенный сценарий и шаги для воспроизведения в конце вопроса. Обратите внимание, что цель состоит в том, чтобы включить внешний скрипт в Excel-Desktop, а не заставить упрощенный сценарий работать другими способами.


Мы все знаем и любим пример цены акций для пользовательских функций, где актуальная цена акций запрашивается у источника с помощью 'fetch':

https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows

Если бы существовал внешний 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?


Чтобы воспроизвести проблему:

  1. Следуйте инструкциям, чтобы создать проект базовых пользовательских функций (используя опцию машинописного текста) и убедитесь, что они работают ( https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows)

  2. Создайте файл javascript "globalapi.js" и поместите его в папку "dist/win32/ship" (ту же папку, в которой содержится пользовательская функция javascript). Просто объявите глобальную переменную в файле globalapi.js следующим образом:

    var someGlobalString = 'This is a global string';
    
  3. Включите скрипт "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>
    
  4. Измените функцию "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.

Спасибо!

Другие вопросы по тегам