Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Если пользовательская функция получает недопустимые входные данные, не может получить доступ к ресурсу или не может вычислить результат, верните наиболее конкретную ошибку Excel. Проверьте параметры на ранней стадии, чтобы быстро завершить ошибку, и используйте try...catch блоки, чтобы превратить низкоуровневые исключения в явные ошибки Excel.
Обнаружение и возвращение ошибки
В следующем примере выполняется проверка U.S. ZIP Code с помощью регулярного выражения перед продолжением. Если формат недопустим, возникает #VALUE! ошибка.
/**
* Gets a city name for the given U.S. ZIP Code.
* @customfunction
* @param {string} zipCode
* @returns The city of the ZIP Code.
*/
function getCity(zipCode: string): string {
let isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(zipCode);
if (isValidZip) return cityLookup(zipCode);
let error = new CustomFunctions.Error(CustomFunctions.ErrorCode.invalidValue, "Please provide a valid U.S. zip code.");
throw error;
}
Объект CustomFunctions.Error
Объект CustomFunctions.Error возвращает ошибку в ячейку. Укажите ошибку ErrorCode , выбрав значение из следующего списка.
| Значение перечисления ErrorCode | Значение ячейки Excel | Описание |
|---|---|---|
divisionByZero |
#DIV/0 |
Функция пытается разделить на ноль. |
invalidName |
#NAME? |
В имени функции есть опечатка. Обратите внимание, что эта ошибка поддерживается как ошибка ввода пользовательской функции, но не как ошибка вывода пользовательской функции. |
invalidNumber |
#NUM! |
Существует проблема с числом в формуле. |
invalidReference |
#REF! |
Функция ссылается на недопустимую ячейку. Обратите внимание, что эта ошибка поддерживается как ошибка ввода пользовательской функции, но не как ошибка вывода пользовательской функции. |
invalidValue |
#VALUE! |
Значение в формуле имеет неправильный тип. |
notAvailable |
#N/A |
Функция или служба недоступны. |
nullReference |
#NULL! |
Диапазоны в формуле не пересекаются. |
В следующем примере кода показано, как создать и вернуть ошибку для неверного числа (#NUM!).
let error = new CustomFunctions.Error(CustomFunctions.ErrorCode.invalidNumber);
throw error;
Ошибки #VALUE! и #N/A также поддерживают пользовательские сообщения об ошибках. Пользовательские сообщения об ошибках отображаются в меню индикатора ошибки, доступ к которому осуществляется путем наведении указателя мыши на флаг ошибки в каждой ячейке с ошибкой. В следующем примере показано, как вернуть пользовательское сообщение об ошибке с ошибкой #VALUE! .
// You can only return a custom error message with the #VALUE! and #N/A errors.
let error = new CustomFunctions.Error(CustomFunctions.ErrorCode.invalidValue, "The parameter can only contain lowercase characters.");
throw error;
Обработка ошибок при работе с динамическими массивами
Пользовательские функции могут возвращать динамические массивы, включающие ошибки. Например, пользовательская функция может выводить массив [1],[#NUM!],[3]. В следующем примере кода показано, как передать три параметра в пользовательскую функцию, заменить один параметр ошибкой #NUM! , а затем вернуть двумерный массив с результатами для каждого входного ввода.
/**
* Returns the #NUM! error as part of a 2-dimensional array.
* @customfunction
* @param {number} first First parameter.
* @param {number} second Second parameter.
* @param {number} third Third parameter.
* @returns {number[][]} Three results, as a 2-dimensional array.
*/
function returnInvalidNumberError(first, second, third) {
// Use the `CustomFunctions.Error` object to retrieve an invalid number error.
const error = new CustomFunctions.Error(
CustomFunctions.ErrorCode.invalidNumber, // Corresponds to the #NUM! error in the Excel UI.
);
// Enter logic that processes the first, second, and third input parameters.
// Imagine that the second calculation results in an invalid number error.
const firstResult = first;
const secondResult = error;
const thirdResult = third;
// Return the results of the first and third parameter calculations and a #NUM! error in place of the second result.
return [[firstResult], [secondResult], [thirdResult]];
}
Ошибки в качестве входных данных пользовательской функции
Пользовательская функция может оценить, даже если входной диапазон содержит ошибку. Например, пользовательская функция может принимать диапазон A2:A7 в качестве входных данных, даже если A6:A7 содержит ошибку.
Для обработки входных данных, содержащих ошибки, настраиваемая функция должна иметь свойство allowErrorForDataTypeAny метаданных JSON, которое имеет значение true. Дополнительные сведения см. в статье Создание метаданных JSON вручную для пользовательских функций .
Важно!
Свойство allowErrorForDataTypeAny можно использовать только с созданными вручную метаданными JSON. Это свойство не работает с автоматически созданным процессом метаданных JSON.
Использование try...catch блоков
Используйте try...catch блоки для перехвата потенциальных ошибок и возврата пользователям значимых сообщений об ошибках. По умолчанию Excel возвращает необработанных #VALUE! ошибок или исключений.
В следующем примере кода пользовательская функция использует выборку для вызова службы REST. Если вызов завершается сбоем, например когда служба REST возвращает ошибку или сеть недоступна, пользовательская функция возвращается #N/A , чтобы показать, что веб-вызов завершился сбоем.
/**
* Gets a comment from the hypothetical contoso.com/comments API.
* @customfunction
* @param {number} commentID ID of a comment.
*/
function getComment(commentID) {
let url = "https://www.contoso.com/comments/" + commentID;
return fetch(url)
.then(function (data) {
return data.json();
})
.then(function (json) {
return json.body;
})
.catch(function (error) {
throw new CustomFunctions.Error(CustomFunctions.ErrorCode.notAvailable);
})
}
Дальнейшие действия
Узнайте, как устранять проблемы с пользовательскими функциями.