Учебное руководство: обмен данными и событиями между пользовательскими функциями Excel и областью задач

Общий доступ к глобальным данным и отправка событий между областью задач и пользовательскими функциями надстройки Excel с общей средой выполнения.

Совместное использование состояния между пользовательской функцией и кодом области задач

В приведенных ниже инструкциях показано, как предоставить общий доступ к глобальной переменной для пользовательской функции и кода области задач. В этом руководстве предполагается, что вы завершили работу с руководством по пользовательским функциям Excel с пользовательскими функциями Excel, использующими проект общей среды выполнения с типом скрипта JavaScript. Используйте надстройку, созданную в этом руководстве, чтобы выполнить следующие инструкции.

Создание пользовательских функций для получения или сохранения общего состояния

  1. В Visual Studio Code откройте файл src/functions/functions.js.

  2. В строке 1 в самом верху вставьте следующий код. При этом будет инициализирована глобальная переменная sharedState.

    window.sharedState = "empty";
    
  3. Добавьте следующий код, чтобы создать пользовательскую функцию, которая сохранит значения переменной sharedState.

    /**
     * Saves a string value to shared state with the task pane
     * @customfunction STOREVALUE
     * @param {string} value String to write to shared state with task pane.
     * @return {string} A success value
     */
    function storeValue(sharedValue) {
      window.sharedState = sharedValue;
      return "value stored";
    }
    
  4. Добавьте следующий код, чтобы создать пользовательскую функцию, которая получит текущее значение переменной sharedState.

    /**
     * Gets a string value from shared state with the task pane
     * @customfunction GETVALUE
     * @returns {string} String value of the shared state with task pane.
     */
    function getValue() {
      return window.sharedState;
    }
    
  5. Сохраните файл.

Создание элементов управления области задач для работы с глобальными данными

  1. Откройте файл src/taskpane/taskpane.html.

  2. После закрытия элемента </main> добавьте следующий HTML-код. С помощью HTML будут созданы два текстовых поля и кнопки для получения и хранения глобальных данных.

    <ol>
      <li>
        Enter a value to send to the custom function and select
        <strong>Store</strong>.
      </li>
      <li>
        Enter <strong>=CONTOSO.GETVALUE()</strong> into a cell to retrieve it.
      </li>
      <li>
        To send data to the task pane, in a cell, enter
        <strong>=CONTOSO.STOREVALUE("new value")</strong>
      </li>
      <li>Select <strong>Get</strong> to display the value in the task pane.</li>
    </ol>
    
    <p>Store new value to shared state</p>
    <div>
      <input type="text" id="storeBox" />
      <button onclick="storeSharedValue()">Store</button>
    </div>
    
    <p>Get shared state value</p>
    <div>
      <input type="text" id="getBox" />
      <button onclick="getSharedValue()">Get</button>
    </div>
    
  3. Перед закрывающим элементом </body> добавьте приведенный ниже сценарий. Этот код обрабатывает события нажатия кнопки, когда пользователь хочет сохранить или получить глобальные данные.

    <script>
      function storeSharedValue() {
        let sharedValue = document.getElementById('storeBox').value;
        window.sharedState = sharedValue;
      }
    
      function getSharedValue() {
        document.getElementById('getBox').value = window.sharedState;
      }
    </script>
    
  4. Сохраните файл.

  5. Выполните построение проекта.

    npm run build
    

Обмен данными между пользовательскими функциями и областью задач

  • Запустите проект, выполнив приведенную ниже команду.

    npm run start
    

После запуска Excel можно использовать кнопки области задач для хранения или получения общих данных. Введите =CONTOSO.GETVALUE() в ячейку, чтобы пользовательская функция получила те же общие данные. Можно также использовать =CONTOSO.STOREVALUE("new value") для изменения значения общих данных.

Примечание.

Вызов некоторых API Office из пользовательских функций с помощью общей среды выполнения возможен. Дополнительные сведения см. в статье Вызов API Microsoft Excel из пользовательской функции.

См. также