Руководство: создание пользовательских функций в Excel
Пользовательские функции позволяют добавлять новые функции в Excel путем определения этих функций в JavaScript как части надстройки. Пользователи в Excel могут получить доступ к пользовательским функциям так же, как и к любой встроенной функции в Excel, например SUM()
. Вы можете создавать пользовательские функции, которые будут выполнять простые задачи, такие как вычисления, или более сложные задачи, такие как потоковая передача данных в режиме реального времени из Интернета на лист.
В этом руководстве описан порядок выполнения перечисленных ниже задач.
- Создание надстройки пользовательской функции с помощью генератора Yeoman для надстроек Office.
- Использование готовой пользовательской функции для выполнения простых вычислений
- Создание пользовательской функции, которая получает данные из сети Интернет.
- Создание пользовательской функции, которая осуществляет потоковую передачу данных в реальном времени из сети Интернет
Предварительные требования
Node.js (последняя версия LTS). Посетите сайтNode.js , чтобы скачать и установить правильную версию для вашей операционной системы.
Последняя версия Yeoman и генератора Yeoman для надстроек Office. Выполните в командной строке указанную ниже команду, чтобы установить эти инструменты глобально.
npm install -g yo generator-office
Примечание.
Даже если вы уже установили генератор Yeoman, рекомендуем обновить пакет до последней версии из npm.
Пакет Office, подключенный к подписке Microsoft 365 (включая Office в Интернете).
Примечание.
Если у вас еще нет Office, вы можете получить подписку разработчика на Microsoft 365 E5 в рамках программы microsoft 365 для разработчиков. Дополнительные сведения см. в разделе Часто задаваемые вопросы. Кроме того, вы можете зарегистрироваться для получения бесплатной пробной версии на 1 месяц или приобрести план Microsoft 365.
Создание проекта пользовательских функций
Чтобы начать, создайте проект кода для разработки надстройки пользовательской функции. Генератор Yeoman для надстроек Office настроит в вашем проекте некоторые готовые пользовательские функции, которые можно попробовать. Если вы уже с помощью краткого руководства по пользовательским функциям создали проект, то продолжайте работать с ним и пропустите этот шаг.
Примечание.
При повторном создании проекта Yo Office может возникнуть ошибка, так как в кэше Office уже есть экземпляр функции с тем же именем. Это можно предотвратить путем очистки кэша Office перед запуском npm run start
.
Выполните следующую команду, чтобы создать проект надстройки с помощью генератора Yeoman. Папка, содержащая проект, будет добавлена в текущий каталог.
yo office
Примечание.
При выполнении команды
yo office
может появиться запрос о политиках сбора данных генератора Yeoman и средств CLI надстройки Office. Используйте предоставленные сведения, чтобы ответить на запросы подходящим образом.При появлении запроса предоставьте следующую информацию для создания проекта надстройки.
-
Выберите тип проекта:
Excel Custom Functions using a Shared Runtime
-
Выберите тип скрипта:
JavaScript
-
Как вы хотите назвать надстройку?
My custom functions add-in
Генератор Yeoman создаст файлы проекта и установит вспомогательные компоненты Node.
-
Выберите тип проекта:
Перейдите к корневой папке проекта.
cd "My custom functions add-in"
Выполните построение проекта.
npm run build
Примечание.
Надстройки Office должны использовать HTTPS, а не HTTP, даже в случае разработки. Если вам будет предложено установить сертификат после того, как вы запустите
npm run build
, примите предложение установить сертификат от генератора Yeoman.Запустите локальный веб-сервер, работающий на Node.js. Вы можете попробовать использовать надстройку пользовательской функции в Excel.
Команда для тестирования надстройки в Excel в Windows или Mac зависит от того, когда был создан проект. Если раздел "scripts" package.json файла проекта содержит скрипт start:desktop, выполните команду ; в npm run start:desktop
противном случае выполните команду npm run start
. Запустится локальный веб-сервер, и Excel откроется с загруженной надстройкой.
Примечание.
Надстройки Office должны использовать HTTPS, а не HTTP, даже во время разработки. Если после выполнения одной из следующих команд вам будет предложено установить сертификат, примите запрос на установку сертификата, который предоставляет генератор Yeoman. Кроме того, вам может потребоваться запустить командную строку или терминал с правами администратора, чтобы внести изменения.
Если вы впервые разрабатываете надстройку Office на компьютере, в командной строке может появиться запрос на предоставление Microsoft Edge WebView исключения замыкания на себя ("Разрешить замыкания на себя локальный узел для Microsoft Edge WebView?"). При появлении запроса введите
Y
, чтобы разрешить исключение. Обратите внимание, что вам потребуются права администратора, чтобы разрешить исключение. После этого вам не следует запрашивать исключение при загрузке неопубликованных надстроек Office в будущем (если вы не удалите исключение с компьютера). Дополнительные сведения см. в разделе "Не удается открыть эту надстройку из localhost" при загрузке надстройки Office или с помощью Fiddler.
Проверка работы готовой пользовательской функции
Созданный проект пользовательских функций содержит некоторые готовые пользовательские функции, определенные в файле src/functions/functions.js. Файл ./manifest.xml указывает, что все пользовательские функции принадлежат пространству имен CONTOSO
. Вы будете использовать пространство имен CONTOSO для доступа к пользовательским функциям в Excel.
Попробуйте, как работает пользовательская функция ADD
, выполнив описанные далее шаги.
В Excel перейдите в любую ячейку и введите
=CONTOSO
. Обратите внимание на то, что в меню автозаполнения содержится список всех функций в пространстве именCONTOSO
.Выполните запуск функции
CONTOSO.ADD
с числами10
и200
в качестве входных параметров, введя значение=CONTOSO.ADD(10,200)
в ячейке и нажав клавишу ВВОД.
Пользовательская функция ADD
вычисляет сумму двух чисел, которые вы указываете и возвращает результат 210.
Если пространство имен CONTOSO
недоступно в меню автозаполнения, для регистрации надстройки в Excel выполните следующие действия.
Выберите Главная>надстройки, а затем — Дополнительные параметры.
В диалоговом окне Надстройки Office выберите Отправить мою надстройку.
Выберите Обзор... и откройте корневой каталог проекта, созданный генератором Yeoman.
Выберите файл manifest.xml и нажмите Открыть, затем нажмите кнопку Отправить.
Теперь давайте оценим, как работает новая функция. В ячейке B1 введите текст =CONTOSO.GETSTARCOUNT("OfficeDev", "Excel-Custom-Functions") и нажмите клавишу ВВОД. Результат в ячейке B1 — это текущее количество звезд, отданных репозиторию Excel-Custom-Functions Github.
Примечание.
Если при загрузке надстройки неопубликованных приложений возникают ошибки, см. раздел Устранение неполадок этой статьи.
Создание пользовательской функции, которая запрашивает данные из сети Интернет
Интеграция данных из Интернета — отличный способ расширения функционала Excel через пользовательские функции. Затем вы создадите пользовательскую функцию с именем getStarCount
, показывающую, сколько звезд имеет данный репозиторий Github.
В проекте Моя надстройка с настраиваемыми функциями найдите файл ./src/functions/functions.js и откройте его в редакторе кода.
В function.jsдобавьте следующий код.
/** * Gets the star count for a given Github repository. * @customfunction * @param {string} userName string name of Github user or organization. * @param {string} repoName string name of the Github repository. * @return {number} number of stars given to a Github repository. */ async function getStarCount(userName, repoName) { try { //You can change this URL to any web request you want to work with. const url = "https://api.github.com/repos/" + userName + "/" + repoName; const response = await fetch(url); //Expect that status code is in 200-299 range if (!response.ok) { throw new Error(response.statusText) } const jsonResponse = await response.json(); return jsonResponse.watchers_count; } catch (error) { return error; } }
Выполните указанную ниже команду, чтобы повторно собрать проект.
npm run build
Чтобы повторно зарегистрировать надстройку в Excel, выполните указанные ниже действия (для Excel в Интернете, для Windows или для Mac). Выполните описанные ниже действия, чтобы новая функция стала доступной.
Закройте Excel, а затем откройте Excel повторно.
На ленте Excel выберите Главная>надстройки.
В разделе Надстройки разработчика выберите Надстройка Мои пользовательские функции , чтобы зарегистрировать ее.
Теперь давайте оценим, как работает новая функция. В ячейке B1 введите текст =CONTOSO. GETSTARCOUNT("OfficeDev", "Office-Add-in-Samples") и нажмите клавишу ВВОД. Вы увидите, что результатом в ячейке B1 является текущее количество звезд, предоставленных репозиторию Office-Add-in-Samples.
Примечание.
Если при загрузке надстройки неопубликованных приложений возникают ошибки, см. раздел Устранение неполадок этой статьи.
Создание потоковой асинхронной пользовательской функции
Функция getStarCount
возвращает количество звезд, которые есть у репозитория в определенный момент времени. Пользовательские функции также возвращают непрерывно изменяемые данные. Эти функции называются потоковыми передачами функций. Они должны содержать параметр invocation
, ссылающийся на ячейку, из которой была вызвана функция. Параметр invocation
используется для обновления содержимого ячейки в любое время.
В примере кода ниже вы заметите наличие двух функций, currentTime
и clock
. Функция currentTime
— это статическая функция, которая не использует потоковую передачу функций. Она возвращает дату в виде строки. Функция clock
использует функцию currentTime
для обеспечения нового времени каждую секунду для ячейки в Excel. В ней используется invocation.setResult
для передачи времени в ячейку Excel и invocation.onCanceled
для обработки отмены функции.
Проект Моя надстройка с настраиваемыми функциями уже содержит две следующие функции в файле ./src/functions/functions.js.
/**
* Returns the current time
* @returns {string} String with the current time formatted for the current locale.
*/
function currentTime() {
return new Date().toLocaleTimeString();
}
/**
* Displays the current time once a second
* @customfunction
* @param {CustomFunctions.StreamingInvocation<string>} invocation Custom function invocation
*/
function clock(invocation) {
const timer = setInterval(() => {
const time = currentTime();
invocation.setResult(time);
}, 1000);
invocation.onCanceled = () => {
clearInterval(timer);
};
}
Чтобы опробовать функции, введите текст =CONTOSO.CLOCK() в ячейку C1 и нажмите ВВОД. Должна отобразиться текущая дата, которая потоком обновляется каждую секунду. Хотя эти часы являются просто таймером в цикле, однако можно использовать аналогичную идею настройки таймера для более сложных функций, которые выполняют веб-запросы в режиме реального времени.
Устранение неполадок
При выполнении руководства несколько раз могут возникнуть проблемы. Если в кэше Office уже есть экземпляр функции с таким же именем, в вашей надстройке возникнет ошибка при ее загрузке без публикации.
Этот конфликт можно предотвратить, очистив кэш Office перед запуском npm run start
. Если процесс npm уже запущен, введите npm stop
, очистите кэш Office, а затем перезапустите npm.
Дальнейшие действия
Поздравляем! Вы создали новый проект пользовательских функций, попробовали, как работает готовая функция, создали пользовательскую функцию, которая запрашивает данные из Интернета, а также создали пользовательскую функцию, которая осуществляет потоковую передачу данных. Далее узнайте, как предоставить общий доступ к данным пользовательской функции в области задач.
Office Add-ins