Trabalhar simultaneamente com vários intervalos em suplementos do Excel
A biblioteca de JavaScript do Excel permite que o suplemento realize operações e defina propriedades, em vários intervalos simultaneamente. Os intervalos não precisam ser contíguos. Além de tornar seu código mais simples, essa maneira de definir uma propriedade é executada muito mais rapidamente do que definir a mesma propriedade individualmente para cada um dos intervalos.
RangeAreas
Um conjunto de intervalos (possivelmente descontínuos) é representado por um objeto RangeAreas . Possui propriedades e métodos semelhantes ao tipo Range
(muitos com os mesmos nomes ou semelhantes), mas foram feitos ajustes para:
- Os tipos de dados para propriedades e o comportamento dos setters e getters.
- Os tipos de dados dos parâmetros do método e os comportamentos do método.
- Os tipos de dados de forma retornam valores.
Alguns exemplos:
-
RangeAreas
tem uma propriedadeaddress
que retorna uma cadeia de caracteres delimitada por vírgula de intervalo de endereços, em vez de apenas um endereço como na propriedadeRange.address
. -
RangeAreas
tem uma propriedadedataValidation
que retorna um objetoDataValidation
que representa a validação de dados de todos os intervalos emRangeAreas
, se for consistente. A propriedade énull
se objetos idênticosDataValidation
não forem aplicados a todos os intervalos emRangeAreas
. Este é um princípio geral, mas não universal, com oRangeAreas
objeto : se uma propriedade não tiver valores consistentes em todos os intervalos noRangeAreas
, então énull
. Veja Ler propriedades de RangeAreas para obter mais informações e algumas exceções. -
RangeAreas.cellCount
é o número total de células em todos os intervalos noRangeAreas
. -
RangeAreas.calculate
recalcula as células de todos os intervalos noRangeAreas
. -
RangeAreas.getEntireColumn
eRangeAreas.getEntireRow
retornar outraRangeAreas
objeto que representa todas as colunas (ou linhas) em todos os intervalos noRangeAreas
. Por exemplo, seRangeAreas
representa "A1: C4" e "F14:L15" em seguida,RangeAreas.getEntireColumn
retorna um objetoRangeAreas
que representa "A:C" e "F:L". -
RangeAreas.copyFrom
pode utilizar umRange
parâmetro ou umRangeAreas
que represente os intervalos de origem da operação de cópia.
Lista completa de membros do intervalo que também estão disponíveis em RangeAreas
Propriedades
Familiarize-se com as Propriedades de leitura do RangeAreas antes de escrever o código que lê as propriedades listadas. Existem sutilezas para o que é retornado.
address
addressLocal
cellCount
conditionalFormats
context
dataValidation
format
isEntireColumn
isEntireRow
style
worksheet
Métodos
calculate()
clear()
convertDataTypeToText()
convertToLinkedDataType()
copyFrom()
getEntireColumn()
getEntireRow()
getIntersection()
getIntersectionOrNullObject()
-
getOffsetRange()
(com o nomegetOffsetRangeAreas
noRangeAreas
objeto) getSpecialCells()
getSpecialCellsOrNullObject()
getTables()
-
getUsedRange()
(com o nomegetUsedRangeAreas
noRangeAreas
objeto) -
getUsedRangeOrNullObject()
(com o nomegetUsedRangeAreasOrNullObject
noRangeAreas
objeto) load()
set()
setDirty()
toJSON()
track()
untrack()
Métodos e propriedades específicos do RangeArea
O tipo RangeAreas
tem alguns métodos e propriedades que não estão no objeto Range
. Segue-se uma seleção das mesmas.
-
areas
: O objetoRangeCollection
que contém todos os intervalos representados pelo objetoRangeAreas
. O objetoRangeCollection
também é novidade e é semelhante a outros objetos do conjunto do Excel. É uma propriedadeitems
que é uma matriz de objetosRange
que representam os intervalos. -
areaCount
: O número total de intervalos emRangeAreas
. -
getOffsetRangeAreas
: Funciona como Range.getOffsetRange, exceto pelo fato de que oRangeAreas
é retornado e contém os intervalos que são todos os deslocamentos de um dos intervalos doRangeAreas
original.
Criar RangeAreas
Você pode criar o objetoRangeAreas
de duas maneiras básicas:
- Ligue
Worksheet.getRanges()
e encaminhe-o em uma cadeia de caracteres com endereços de intervalo separado por vírgula. Se algum intervalo que você deseja incluir tiver sido feito em um NamedItem, você poderá incluir o nome, em vez do endereço, cadeia de caracteres. - Chamar
Workbook.getSelectedRanges()
. Esse método retornará umRangeAreas
representando todos os intervalos selecionados na planilha ativa no momento.
Quando você tiver um objeto RangeAreas
, você pode criar outros usando os métodos de objeto que retornam RangeAreas
como getOffsetRangeAreas
e getIntersection
.
Observação
É possível adicionar diretamente intervalos adicionais para um objeto RangeAreas
. Por exemplo, o conjunto RangeAreas.areas
não tem um métodoadd
.
Aviso
Tente adicionar ou excluir membros diretamente à matrizRangeAreas.areas.items
. Isso levará a um comportamento indesejável no seu código. Por exemplo, é possível enviar um objeto adicional Range
para a matriz, mas isso causará erros porque as propriedades e métodos RangeAreas
se comportam como se o novo item não estivesse ali. Por exemplo, a propriedade areaCount
não inclui intervalos transferidos dessa maneira e o RangeAreas.getItemAt(index)
gera um erro se index
for maior que areasCount-1
. Da mesma forma, excluir um objeto Range
na matriz RangeAreas.areas.items
obtendo uma referência a ele e chamando seu método Range.delete
causa bugs: embora o Range
objeto seja excluído, as propriedades e métodos do objeto pai RangeAreas
se comportam ou tentam se comportar, como se ele ainda existisse. Por exemplo, se o seu código chamar RangeAreas.calculate
, o Office tentará calcular o intervalo, mas haverá erro porque o objeto de intervalo desapareceu.
Definir as propriedades em vários intervalos
Definir uma propriedade em um RangeAreas
objeto define a propriedade correspondente em todos os intervalos no conjunto RangeAreas.areas
.
A seguir, um exemplo de configuração de uma propriedade em vários intervalos. A função realça os intervalos F3:F5 e H3:H5.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let rangeAreas = sheet.getRanges("F3:F5, H3:H5");
rangeAreas.format.fill.color = "pink";
await context.sync();
});
Este exemplo se aplica a cenários nos quais você pode codificar os endereços de intervalo para os quais você passa para getRanges
ou facilmente calculá-los no tempo de execução. Alguns dos cenários em que isso pode ser verdadeiro incluem:
- O código é executado no contexto de um modelo conhecido.
- O código é executado no contexto de dados importados, em que o esquema dos dados é conhecido.
Obter células especiais de vários intervalos
As getSpecialCells
e getSpecialCellsOrNullObject
métodos no RangeAreas
objeto funciona analogamente para métodos de mesmo nome no Range
objeto. Esses métodos retornam as células com característica especificada de todos os intervalos no RangeAreas.areas
conjunto. Para obter mais detalhes sobre células especiais, consulte Localizar células especiais dentro de um intervalo.
Ao chamar as getSpecialCells
ou getSpecialCellsOrNullObject
método em um RangeAreas
objeto:
- Se você passar
Excel.SpecialCellType.sameConditionalFormat
como o primeiro parâmetro, o método retorna todas as células com a mesma formatação condicional que a célula superior esquerda do primeiro intervalo noRangeAreas.areas
conjunto. - Se você passar
Excel.SpecialCellType.sameDataValidation
como o primeiro parâmetro, o método retorna todas as células com a regra de validação de dados que a célula superior esquerda do primeiro intervalo noRangeAreas.areas
conjunto.
Ler propriedades de RangeAreas
A leitura de valores de propriedade RangeAreas
requer cuidados, porque uma determinada propriedade pode ter valores diferentes para intervalos diferentes dentro deRangeAreas
. A regra geral é que, se um valor consistente puder ser retornado, ele será retornado. Por exemplo, no código seguinte, o código RGB para cor-de-rosa (#FFC0CB
) e true
será registado na consola porque ambos os intervalos no RangeAreas
objeto têm um preenchimento cor-de-rosa e ambos são colunas inteiras.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
// The ranges are the F column and the H column.
let rangeAreas = sheet.getRanges("F:F, H:H");
rangeAreas.format.fill.color = "pink";
rangeAreas.load("format/fill/color, isEntireColumn");
await context.sync();
console.log(rangeAreas.format.fill.color); // #FFC0CB
console.log(rangeAreas.isEntireColumn); // true
});
As coisas ficam mais complicadas quando a consistência não é possível. O comportamento das propriedades RangeAreas
seguem estes três princípios de três:
- Uma propriedade booliana de um
RangeAreas
retorno de objetofalse
, a menos que a propriedade seja verdadeira para todos os intervalos de membro. - Propriedades não boolianas, com exceção da propriedade
address
, retornamnull
, a menos que a propriedade correspondente em todos os intervalos de membros tenha o mesmo valor. - A propriedade
address
retorna uma cadeia de caracteres delimitada por vírgulas dos endereços e intervalos dos membros.
Por exemplo, o código a seguir cria um RangeAreas
no qual apenas um intervalo é uma coluna inteira e apenas um é preenchido com rosa. O console mostrará null
para a cor de preenchimento false
para a propriedade isEntireRow
e "Planilha1! F3:F5, Planilha1! H:H"(supondo que o nome da planilha seja "Planilha1") para a propriedadeaddress
.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let rangeAreas = sheet.getRanges("F3:F5, H:H");
let pinkColumnRange = sheet.getRange("H:H");
pinkColumnRange.format.fill.color = "pink";
rangeAreas.load("format/fill/color, isEntireColumn, address");
await context.sync();
console.log(rangeAreas.format.fill.color); // null
console.log(rangeAreas.isEntireColumn); // false
console.log(rangeAreas.address); // "Sheet1!F3:F5, Sheet1!H:H"
});