Localizar células especiais dentro de um intervalo com a API JavaScript do Excel
Este artigo fornece exemplos de código que encontram células especiais dentro de um intervalo com a API JavaScript do Excel. Para obter a lista completa de propriedades e métodos suportados pelo Range
objeto, consulte Excel.Range class (Classe Excel.Range).
Localizar intervalos com células especiais
Os métodos Range.getSpecialCells e Range.getSpecialCellsOrNullObject encontram intervalos com base nas características das respetivas células e nos tipos de valores das respetivas células. Os dois métodos retornam RangeAreas
objetos. Aqui estão as assinaturas dos métodos do arquivo de tipos de dados TypeScript:
getSpecialCells(cellType: Excel.SpecialCellType, cellValueType?: Excel.SpecialCellValueType): Excel.RangeAreas;
getSpecialCellsOrNullObject(cellType: Excel.SpecialCellType, cellValueType?: Excel.SpecialCellValueType): Excel.RangeAreas;
O seguinte exemplo de código utiliza o getSpecialCells
método para localizar todas as células com fórmulas. Sobre este código, observe:
- Ele limita a parte da planilha que precisa ser pesquisada chamando primeiro
Worksheet.getUsedRange
e chamandogetSpecialCells
para apenas esse intervalo. - O método
getSpecialCells
retorna um objetoRangeAreas
, então todas as células com fórmulas serão coloridas de rosa, mesmo que não sejam todas contíguas.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let formulaRanges = usedRange.getSpecialCells(Excel.SpecialCellType.formulas);
formulaRanges.format.fill.color = "pink";
await context.sync();
});
Se nenhuma célula com característica destino existe no intervalo, getSpecialCells
exibe um erro ItemNotFound. Isso desvia o fluxo de controle para um catch
bloco, se houver um. Se não existir um catch
bloco, o erro para o método .
Se você espera que células com característica direcionada sempre deveriam existir, provavelmente desejará o código para gerar um erro se as células não estiverem lá. Se for um cenário válido que não há uma ou mais células correspondentes, o código deve verificar se há essa possibilidade e tratar normalmente sem enviar um erro. Você pode obter esse comportamento com o getSpecialCellsOrNullObject
método e sua propriedade retornada isNullObject
. O seguinte exemplo de código utiliza este padrão. Sobre este código, observe:
- O
getSpecialCellsOrNullObject
método devolve sempre um objeto proxy, pelo que nuncanull
está no sentido javaScript comum. Mas se nenhuma célula de correspondência for encontrada, as propriedades do objetoisNullObject
serão definida comotrue
. -
context.sync
Chama antes de testar aisNullObject
propriedade. Esse é um requisito com todos os métodos e propriedades*OrNullObject
, pois sempre terá que carregar e sincronizar as propriedades na ordem para lê-la. No entanto, não é necessário carregar explicitamente aisNullObject
propriedade. É carregado automaticamente pelocontext.sync
mesmo seload
não for chamado no objeto. Para obter mais informações, veja *OrNullObject methods and properties (Métodos e propriedades do OrNullObject). - Você pode testar esse código selecionando primeiro um intervalo sem células de fórmula e executando-o. Selecione um intervalo que tem pelo menos uma célula com uma fórmula e execute novamente.
await Excel.run(async (context) => {
let range = context.workbook.getSelectedRange();
let formulaRanges = range.getSpecialCellsOrNullObject(Excel.SpecialCellType.formulas);
await context.sync();
if (formulaRanges.isNullObject) {
console.log("No cells have formulas");
}
else {
formulaRanges.format.fill.color = "pink";
}
await context.sync();
});
Para simplificar, todos os outros exemplos de código neste artigo utilizam o getSpecialCells
método em vez de getSpecialCellsOrNullObject
.
Restrinja as células de destino com tipos de valor de célula
As Range.getSpecialCells()
e Range.getSpecialCellsOrNullObject()
métodos aceitam um segundo parâmetro opcional usado para restringir ainda mais as células de destino. Este segundo parâmetro é uma Excel.SpecialCellValueType
você usar para especificar que você quer apenas células que contêm determinados tipos de valores.
Observação
O Excel.SpecialCellValueType
parâmetro só pode ser usado se a Excel.SpecialCellType
está Excel.SpecialCellType.formulas
ou Excel.SpecialCellType.constants
.
Teste para um tipo de valor da célula única
O Excel.SpecialCellValueType
enumeração com esses quatro tipos básicos (além dos outros valores combinados descritos nesta seção posterior):
Excel.SpecialCellValueType.errors
-
Excel.SpecialCellValueType.logical
(ou seja, booliano) Excel.SpecialCellValueType.numbers
Excel.SpecialCellValueType.text
O seguinte exemplo de código localiza células especiais que são constantes numéricas e colorem essas células cor-de-rosa. Sobre este código, observe:
- Só realça as células que têm um valor de número literal. Não realça as células que têm uma fórmula (mesmo que o resultado seja um número) ou uma célula booleana, texto ou estado do erro.
- Para testar o código, certifique-se de que a planilha tenha algumas células com valores numéricos literais, algumas com outros tipos de valores literais e algumas com fórmulas.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let constantNumberRanges = usedRange.getSpecialCells(
Excel.SpecialCellType.constants,
Excel.SpecialCellValueType.numbers);
constantNumberRanges.format.fill.color = "pink";
await context.sync();
});
Teste para vários tipos de valores de célula
Às vezes, você precisa operar com mais de um tipo de valor de célula, como todas as células com valor de texto e com valor booliano ("Lógico"). (Excel.SpecialCellValueType.logical
). O Excel.SpecialCellValueType
enumeração tem valores com tipos combinado. Por exemplo, Excel.SpecialCellValueType.logicalText
segmentará todas as células boolianas e todos os valores de texto.
Excel.SpecialCellValueType.all
é o valor padrão, que não limita os tipos de valor da célula retornados. O seguinte código de exemplo colore todas as células com fórmulas que produzem um valor numérico ou booleano.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let formulaLogicalNumberRanges = usedRange.getSpecialCells(
Excel.SpecialCellType.formulas,
Excel.SpecialCellValueType.logicalNumbers);
formulaLogicalNumberRanges.format.fill.color = "pink";
await context.sync();
});