Criar manualmente metadados JSON para funções personalizadas
Conforme descrito no artigo de descrição geral das funções personalizadas , um projeto de funções personalizadas tem de incluir um ficheiro de metadados JSON e um ficheiro de script (JavaScript ou TypeScript) para registar uma função, disponibilizando-a para utilização. As funções personalizadas são registadas quando o utilizador executa o suplemento pela primeira vez e depois estão disponíveis para o mesmo utilizador em todos os livros.
Importante
Observe que as funções personalizadas do Excel estão disponíveis nas plataformas a seguir.
- Office na Web
- Office no Windows
- Assinatura do Microsoft 365
- revenda perpétua do Office 2016 e posterior
- Office 2021 perpétuo licenciado em volume e posterior
- Office no Mac
As funções personalizadas do Excel não são atualmente suportadas no seguinte:
- Office no iPad
- versões perpétuas licenciadas em volume do Office 2019 ou anterior no Windows
Recomendamos que utilize a autogeração JSON sempre que possível, em vez de criar o seu próprio ficheiro JSON. A autogeneração é menos propensa a erros do utilizador e os yo office
ficheiros estruturados já o incluem. Para obter mais informações sobre as etiquetas JSDoc e o processo de autogeração JSON, veja Autogenerate JSON metadata for custom functions (Gerar automaticamente metadados JSON para funções personalizadas).
No entanto, pode criar um projeto de funções personalizadas do zero. Este processo requer que:
- Escreva o seu ficheiro JSON.
- Verifique se o ficheiro de manifesto está ligado ao ficheiro JSON.
- Associe
id
as suas funções ename
propriedades ao ficheiro de script para registar as suas funções.
A imagem seguinte explica as diferenças entre utilizar yo office
ficheiros de estrutura e escrever JSON de raiz.
Observação
Lembre-se de ligar o seu manifesto ao ficheiro JSON que criar, através da <secção Recursos> no seu ficheiro de manifesto apenas de suplemento se não utilizar o gerador Yeoman para Suplementos do Office.
Criar metadados e ligar ao manifesto
Crie um ficheiro JSON no seu projeto e forneça todos os detalhes sobre as suas funções no mesmo, como os parâmetros da função. Veja o seguinte exemplo de metadados e a referência de metadados para obter uma lista completa das propriedades da função.
Certifique-se de que o ficheiro de manifesto apenas do suplemento referencia o <seu ficheiro JSON na secção Recursos> , semelhante ao exemplo seguinte.
<Resources>
<bt:Urls>
<bt:Url id="JSON-URL" DefaultValue="https://subdomain.contoso.com/config/customfunctions.json"/>
<bt:Url id="JS-URL" DefaultValue="https://subdomain.contoso.com/dist/win32/ship/index.win32.bundle"/>
<bt:Url id="HTML-URL" DefaultValue="https://subdomain.contoso.com/index.html"/>
</bt:Urls>
<bt:ShortStrings>
<bt:String id="namespace" DefaultValue="CONTOSO"/>
</bt:ShortStrings>
</Resources>
Exemplo de metadados JSON
O exemplo a seguir mostra o conteúdo de um arquivo de metadados JSON para um suplemento que define funções personalizadas. As seções que seguem este exemplo fornecem informações detalhadas sobre as propriedades individuais neste exemplo de JSON.
{
"allowCustomDataForDataTypeAny": true,
"allowErrorForDataTypeAny": true,
"functions": [
{
"id": "ADD",
"name": "ADD",
"description": "Add two numbers",
"helpUrl": "http://www.contoso.com/help",
"result": {
"type": "number",
"dimensionality": "scalar"
},
"parameters": [
{
"name": "first",
"description": "first number to add",
"type": "number",
"dimensionality": "scalar"
},
{
"name": "second",
"description": "second number to add",
"type": "number",
"dimensionality": "scalar"
}
]
},
{
"id": "GETDAY",
"name": "GETDAY",
"description": "Get the day of the week",
"helpUrl": "http://www.contoso.com/help",
"result": {
"dimensionality": "scalar"
},
"parameters": []
},
{
"id": "INCREMENTVALUE",
"name": "INCREMENTVALUE",
"description": "Count up from zero",
"helpUrl": "http://www.contoso.com/help",
"result": {
"dimensionality": "scalar"
},
"parameters": [
{
"name": "increment",
"description": "the number to be added each time",
"type": "number",
"dimensionality": "scalar"
}
],
"options": {
"stream": true,
"cancelable": true
}
},
{
"id": "SECONDHIGHEST",
"name": "SECONDHIGHEST",
"description": "Get the second highest number from a range",
"helpUrl": "http://www.contoso.com/help",
"result": {
"dimensionality": "scalar"
},
"parameters": [
{
"name": "range",
"description": "the input range",
"type": "number",
"dimensionality": "matrix"
}
]
}
]
}
Observação
Está disponível um ficheiro JSON de exemplo completo no histórico de consolidações do repositório do GitHub OfficeDev/Excel-Custom-Functions . Uma vez que o projeto foi ajustado para gerar automaticamente JSON, uma amostra completa do JSON manuscrito só está disponível em versões anteriores do projeto.
Referência de metadados
allowCustomDataForDataTypeAny
A allowCustomDataForDataTypeAny
propriedade é um tipo de dados booleano. Definir este valor como permite que true
uma função personalizada aceite tipos de dados como parâmetros e valores devolvidos. Para saber mais, veja Funções personalizadas e tipos de dados.
Observação
Ao contrário da maioria das outras propriedades de metadados JSON, allowCustomDataForDataTypeAny
é uma propriedade de nível superior e não contém subpropriedades. Veja o exemplo de código de metadados JSON anterior para obter um exemplo de como formatar esta propriedade.
allowErrorForDataTypeAny
A allowErrorForDataTypeAny
propriedade é um tipo de dados booleano. Definir o valor como true
permite que uma função personalizada processe erros como valores de entrada. Todos os parâmetros com o tipo any
ou any[][]
podem aceitar erros como valores de entrada quando allowErrorForDataTypeAny
está definido como true
. O valor predefinido allowErrorForDataTypeAny
é false
.
Observação
Ao contrário das outras propriedades de metadados JSON, allowErrorForDataTypeAny
é uma propriedade de nível superior e não contém subpropriedades. Veja o exemplo de código de metadados JSON anterior para obter um exemplo de como formatar esta propriedade.
funções
A propriedade functions
é um conjunto de objetos de funções personalizadas. A tabela a seguir lista as propriedades de cada objeto.
Propriedade | Tipo de dados | Obrigatório | Descrição |
---|---|---|---|
description |
string | Não | Descrição da função que é exibida aos usuários finais no Excel. Por exemplo, Converte um valor em Celsius para Fahrenheit. |
helpUrl |
string | Não | A URL que fornece informações sobre a função. (Ela é exibida em um painel de tarefas). Por exemplo, http://contoso.com/help/convertcelsiustofahrenheit.html . |
id |
string | Sim | Identificação exclusiva para a função. Essa ID pode conter apenas caracteres alfanuméricos e pontos e não deve ser alterada depois de configurada. |
name |
string | Sim | O nome da função que é exibida aos usuários finais no Excel. No Excel, este nome de função tem o prefixo do espaço de nomes das funções personalizadas especificado no ficheiro de manifesto apenas do suplemento. |
options |
objeto | Não | Permite que você personalize alguns aspectos de como e quando o Excel executa a função. Confira opções para obter detalhes. |
parameters |
array | Sim | Matriz que define os parâmetros de entrada para a função. Veja os parâmetros para obter detalhes. |
result |
objeto | Sim | Objeto que define o tipo de informação que é retornada pela função do Excel. Confira resultado para obter detalhes. |
options
O objeto options
permite que você personalize alguns aspectos de como e quando o Excel executa a função. A tabela a seguir lista as propriedades do objeto options
.
Propriedade | Tipo de dados | Obrigatório | Descrição |
---|---|---|---|
cancelable |
booliano | Não O valor padrão é false . |
Se o valor for true , o Excel chamará o manipulador CancelableInvocation sempre que o usuário realizar uma ação que tenha o efeito de cancelar a função, por exemplo, manualmente acionar um recálculo ou editar uma célula referenciada pela função. Normalmente, as funções canceláveis são utilizadas apenas para funções assíncronas que devolvem um único resultado e precisam de processar o cancelamento de um pedido de dados. Uma função não pode utilizar as stream propriedades e cancelable . |
requiresAddress |
booliano | Não O valor padrão é false . |
Se true , a função personalizada pode aceder ao endereço da célula que a invocou. A address propriedade do parâmetro de invocação contém o endereço da célula que invocou a função personalizada. Uma função não pode utilizar as stream propriedades e requiresAddress . |
requiresParameterAddresses |
booliano | Não O valor padrão é false . |
Se true , a função personalizada pode aceder aos endereços dos parâmetros de entrada da função. Esta propriedade tem de ser utilizada em combinação com a dimensionality propriedade do objeto de resultado e dimensionality tem de ser definida como matrix . Veja Detetar o endereço de um parâmetro para obter mais informações. |
stream |
booliano | Não O valor padrão é false . |
Se o valor for true , a função poderá gerar uma saída para a célula de forma repetida, mesmo quando invocada somente uma vez. Essa opção é útil para fontes de dados que mudam constantemente, como preços de ações. A função não deve ter instruções return . Em vez disso, o valor do resultado é transmitido como o argumento da função de chamada de StreamingInvocation.setResult retorno. Para obter mais informações, veja Criar uma função de transmissão em fluxo. |
volatile |
booliano | Não O valor padrão é false . |
Se true , a função recalcula cada vez que o Excel volta a calcular, em vez de apenas quando os valores dependentes da fórmula forem alterados. Uma função não pode utilizar as stream propriedades e volatile . Se as stream propriedades e volatile estiverem ambas definidas como true , a propriedade volátil será ignorada. |
parâmetros
A propriedade parameters
é uma matriz de objetos de parâmetro. A tabela a seguir lista as propriedades de cada objeto.
Propriedade | Tipo de dados | Obrigatório | Descrição |
---|---|---|---|
description |
string | Não | Uma descrição do parâmetro. Isto é apresentado no IntelliSense do Excel. |
dimensionality |
string | Não | Tem de ser scalar (um valor não-matriz) ou matrix (uma matriz bidimensional). |
name |
string | Sim | O nome do parâmetro. Este nome é apresentado no IntelliSense do Excel. |
type |
string | Não | O tipo de dados do parâmetro. Pode ser boolean , number , string ou any , o que lhe permite utilizar qualquer um dos três tipos anteriores. Se esta propriedade não for especificada, o tipo de dados é predefinido como any . |
optional |
booliano | Não | Se for true , o parâmetro será opcional. |
repeating |
booliano | Não | Se true , os parâmetros são preenchidos a partir de uma matriz especificada. Tenha em atenção que todas as funções que repetem parâmetros são consideradas parâmetros opcionais por definição. |
resultado
O objeto result
que define o tipo de informação que é retornado pela função. A tabela a seguir lista as propriedades do objeto result
.
Propriedade | Tipo de dados | Obrigatório | Descrição |
---|---|---|---|
dimensionality |
string | Não | Tem de ser scalar (um valor não-matriz) ou matrix (uma matriz bidimensional). |
type |
string | Não | O tipo de dados do resultado. Pode ser boolean , number , string ou any (o que lhe permite utilizar qualquer um dos três tipos anteriores). Se esta propriedade não for especificada, o tipo de dados é predefinido como any . |
Associar os nomes de função com metadados JSON
Para que uma função funcione corretamente, tem de associar a propriedade da id
função à implementação javaScript. Certifique-se de que existe uma associação. Caso contrário, a função não será registada e não será utilizável no Excel. O seguinte exemplo de código mostra como fazer a associação com a CustomFunctions.associate()
função . A amostra define a função personalizada add
e associa com o objeto no arquivo de metadados JSON onde o valor da id
propriedade é adicionar.
/**
* Add two numbers
* @customfunction
* @param {number} first First number
* @param {number} second Second number
* @returns {number} The sum of the two numbers.
*/
function add(first, second) {
return first + second;
}
CustomFunctions.associate("ADD", add);
O JSON seguinte mostra os metadados JSON que estão associados ao código JavaScript da função personalizada anterior.
{
"functions": [
{
"description": "Add two numbers",
"id": "ADD",
"name": "ADD",
"parameters": [
{
"description": "First number",
"name": "first",
"type": "number"
},
{
"description": "Second number",
"name": "second",
"type": "number"
}
],
"result": {
"type": "number"
}
}
]
}
Lembre-se das seguintes práticas recomendadas quando criar funções personalizadas no arquivo JavaScript e especificar as informações correspondentes no arquivo de metadados JSON.
No arquivo de metadados JSON, verifique se o valor de cada propriedade
id
contém apenas caracteres alfanuméricos e pontos.No arquivo de metadados JSON, garanta que o valor de cada propriedade
id
seja exclusivo dentro do escopo do arquivo. Ou seja, nenhum objeto de duas funções no arquivo de metadados deve ter o mesmo valorid
.Não altere o valor de uma propriedade
id
no arquivo de metadados JSON, depois de mapeá-lo para um nome de função JavaScript correspondente. Para alterar o nome da função que os usuários finais visualizam no Excel, atualize a propriedadename
no arquivo de metadados JSON. No entanto, nunca altere o valor de uma propriedadeid
depois de estabelecida.No ficheiro JavaScript, especifique uma associação de função personalizada utilizando
CustomFunctions.associate
depois de cada função.
O exemplo seguinte mostra os metadados JSON que correspondem às funções definidas no exemplo de código JavaScript anterior. Os id
valores de propriedade e name
estão em maiúsculas, o que é uma melhor prática ao descrever as suas funções personalizadas. Só tem de adicionar este JSON se estiver a preparar manualmente o seu próprio ficheiro JSON e não estiver a utilizar agerição automática. Para obter mais informações sobre a autogeração, veja Autogenerate JSON metadata for custom functions (Gerar automaticamente metadados JSON para funções personalizadas).
{
"$schema": "https://developer.microsoft.com/json-schemas/office-js/custom-functions.schema.json",
"functions": [
{
"id": "ADD",
"name": "ADD",
...
},
{
"id": "INCREMENT",
"name": "INCREMENT",
...
}
]
}
Próximas etapas
Aprenda as melhores práticas para atribuir um nome à sua função ou descubra como localizar a função com o método JSON manuscrito descrito anteriormente.