Adicionar validação de dados para intervalos do Excel
A biblioteca JavaScript do Excel fornece APIs para permitir que seu suplemento adicione a validação de dados automáticos a tabelas, colunas, linhas e outros intervalos em uma pasta de trabalho. Para entender os conceitos e a terminologia da validação de dados, consulte os artigos a seguir sobre como os usuários adicionam a validação de dados por meio da interface do usuário do Excel.
- Aplicar validação de dados às células
- Validação de dados
- Exemplos e descrição de validação de dados no Excel
Controle de programação de validação de dados
A Range.dataValidation
propriedade, que usa um objeto DataValidation, é o ponto de entrada para o controle de programação de validação de dados no Excel. Há cinco propriedades para o objeto DataValidation
:
rule
— define o que constitui dados válidos para o intervalo. Ver DataValidationRule.errorAlert
— Especifica se um erro aparece se o usuário inserir dados inválidos e definir o texto de alerta, o título e o estilo; por exemplo,information
,warning
estop
. Ver DataValidationErrorAlert.prompt
— Especifica se um prompt é exibido quando o usuário passa o mouse sobre o intervalo e define a mensagem de prompt. Ver DataValidationPrompt.ignoreBlanks
— especifica se a regra de validação de dados se aplica a células em branco no intervalo. O padrão étrue
type
— Uma identificação somente leitura do tipo de validação, como WholeNumber, Date, TextLength etc. Ele é definido indiretamente quando você define arule
propriedade.
Observação
A validação de dados adicionada programaticamente funciona exatamente como a validação de dados adicionada manualmente. Em particular, observe que a validação de dados é disparada somente se o usuário inserir diretamente um valor em uma célula ou copiar e colar uma célula de outro local da pasta de trabalho e escolher a opção de colagem Valores. Se o usuário copiar uma célula e fizer uma colagem simples em um intervalo com a validação de dados, a validação não será disparada.
Criar regras de validação
Para adicionar a validação de dados a um intervalo, o código deve configurar a propriedade rule
do objeto DataValidation
em Range.dataValidation
. Isso leva ao objeto DataValidationRule que tem sete propriedades opcionais. Não mais de uma dessas propriedades pode estar presente em qualquer objeto DataValidationRule
. A propriedade que você incluir determina o tipo de validação.
Tipos de regras de validação Basic e DateTime
As três primeiras propriedades DataValidationRule
(ou seja, tipos de regra de validação) consideram o objeto BasicDataValidation como o seu valor.
wholeNumber
— Requer um número inteiro, além de qualquer outra validação especificada peloBasicDataValidation
objeto.decimal
— Requer um número decimal, além de qualquer outra validação especificada peloBasicDataValidation
objeto.textLength
— Aplica os detalhes de validação noBasicDataValidation
objeto ao comprimento do valor da célula.
Aqui está um exemplo de como criar uma regra de validação. Observe o seguinte sobre este código.
- O
operator
é o operadorgreaterThan
binário . Sempre que você usa um operador binário, o valor que o usuário tenta inserir na célula é o operando à esquerda e o valor especificado emformula1
é o operando à direita. Então esta regra diz que apenas números inteiros que são maiores do que 0 são válidos. - O
formula1
é um número embutido. Se não souber no momento da codificação qual é o valor, você também poderá usar uma fórmula do Excel (como uma cadeia de caracteres) para o valor. Por exemplo, "= A3" e "SOMA(A4,B5) =" também seriam valoresformula1
.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
wholeNumber: {
formula1: 0,
operator: Excel.DataValidationOperator.greaterThan
}
};
await context.sync();
});
Confira BasicDataValidation para uma lista de outros operadores binários.
Há também dois operadores ternários: between
e notBetween
. Para usá-los, você deve especificar a propriedade formula2
opcional. Os valoresformula1
e formula2
são os operandos delimitadores. O valor que o usuário tenta inserir na célula é o terceiro operando (calculado). A seguir está um exemplo de como usar o operador "Entre".
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
decimal: {
formula1: 0,
formula2: 100,
operator: Excel.DataValidationOperator.between
}
};
await context.sync();
});
As próximas duas regras de propriedades usam o objeto DateTimeDataValidation como seu valor.
date
time
O objeto DateTimeDataValidation
é estruturado da mesma forma que o BasicDataValidation
: com as propriedades formula1
, formula2
e operator
, e é usado da mesma maneira. A diferença é que você não pode usar um número nas propriedades de fórmula, mas você pode inserir uma cadeia ISO 8606 datetime (ou uma fórmula do Excel). Veja a seguir um exemplo que define valores válidos como datas na primeira semana de abril de 2022.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
date: {
formula1: "2022-04-01",
formula2: "2022-04-08",
operator: Excel.DataValidationOperator.between
}
};
await context.sync();
});
Tipos de regra de validação de lista
Use a propriedade list
do objeto DataValidationRule
para especificar valores que são válidos apenas em uma lista finita. Apresentamos um exemplo a seguir. Observe o seguinte sobre este código.
- Ele pressupõe que se trata de uma planilha chamada "Nomes" e que os valores no intervalo "A1: A3" são nomes.
- A propriedade
source
especifica a lista de valores válidos. O argumento de cadeia de caracteres se refere a um intervalo que contém os nomes. Você também pode atribuir uma lista delimitada por vírgula; por exemplo: "Lara, Pedro, Marina". - A propriedade
inCellDropDown
especifica se um controle de lista suspensa será exibido na célula quando o usuário a selecionar. Se definido comotrue
, em seguida, a lista suspensa é exibida com a lista de valores dosource
.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
let nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3");
range.dataValidation.rule = {
list: {
inCellDropDown: true,
source: "=Names!$A$1:$A$3"
}
};
await context.sync();
})
Tipo de regra de validação personalizada
Use a propriedade custom
no objeto DataValidationRule
para especificar uma fórmula de validação personalizada. Apresentamos um exemplo a seguir. Observe o seguinte sobre este código.
- Ele pressupõe que há uma tabela de duas colunas com as colunas Nome do Atleta e Comentários nas colunas A e B da planilha.
- Para reduzir o nível de detalhamento na coluna Comentários, ela torna os dados que incluem o nome do atleta inválidos.
SEARCH(A2,B2)
Retorna a posição inicial, na cadeia de caracteres em B2, da cadeia de caracteres em A2. Se A2 não estiver contida em B2, ela não retornará um número.ISNUMBER()
retorna um booliano. Portanto, a propriedadeformula
diz que os dados válidos para a coluna Comentário são os dados que não incluem a cadeia de caracteres da coluna Nome do Atleta.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let commentsRange = sheet.tables.getItem("AthletesTable").columns.getItem("Comments").getDataBodyRange();
commentsRange.dataValidation.rule = {
custom: {
formula: "=NOT(ISNUMBER(SEARCH(A2,B2)))"
}
};
await context.sync();
});
Criar alertas de erro de validação
Você pode criar um alerta de erro personalizado que aparece quando um usuário tenta inserir dados inválidos em uma célula. Apresentamos um exemplo simples a seguir. Observe o seguinte sobre este código.
- A propriedade
style
determina se o usuário recebe um alerta informativo, um aviso e um alerta "parar". Apenasstop
realmente impede que o usuário adicione dados inválidos. Os pop-ups parawarning
einformation
têm opções que permitem que o usuário insira os dados inválidos de qualquer maneira. - As propriedades
showAlert
padrão paratrue
. Isso significa que o Excel fará um pop-up de um alerta genérico (do tipostop
) a menos que você crie um alerta personalizado que defineshowAlert
false
ou define uma mensagem, título e estilo personalizados. O código define uma mensagem personalizada e o título.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.errorAlert = {
message: "Sorry, only positive whole numbers are allowed",
showAlert: true, // The default is 'true'.
style: Excel.DataValidationAlertStyle.stop,
title: "Negative or Decimal Number Entered"
};
// Set range.dataValidation.rule and optionally .prompt here.
await context.sync();
});
Para saber mais, confira DataValidationErrorAlert.
Criar solicitações de validação
Você pode criar um prompt instrutivo que é exibido quando um usuário passa o mouse sobre ele ou seleciona uma célula à qual os dados de validação foram aplicados. Apresentamos um exemplo a seguir.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.prompt = {
message: "Please enter a positive whole number.",
showPrompt: true, // The default is 'false'.
title: "Positive Whole Numbers Only."
};
// Set range.dataValidation.rule and optionally .errorAlert here.
await context.sync();
});
Para saber mais, confira DataValidationPrompt.
Remover validação de dados de um intervalo
Para remover a validação de dados de um intervalo, chame o método Range.dataValidation.clear().
myrange.dataValidation.clear()
Não é necessário que o intervalo que você desmarcar seja o mesmo intervalo de um intervalo no qual você adicionou a validação de dados. Caso contrário, apenas as células sobrepostas, se houver, dos dois intervalos são desmarcadas.
Observação
Limpar a validação de dados de um intervalo também limpará qualquer validação de dados que o usuário tenha adicionado manualmente ao intervalo.