Olá, seguidor e seguidora do blog!
Neste quinto artigo do ano de 2023 volto a falar sobre a linguagem do
futuro do desenvolvimento para o Excel Online: o Office Script.</span >
futuro do desenvolvimento para o Excel Online: o Office Script.</span >
Vamos entender neste artigo
o que não devemos mais fazer em nossas rotinas no Office Script.</b ></span >
o que não devemos mais fazer em nossas rotinas no Office Script.</b ></span >
Se você prefere um vídeo ao invés do artigo, então
clique aqui para
ter acesso a aula gravada sobre o assunto.</span >
clique aqui para
ter acesso a aula gravada sobre o assunto.</span >
Antes de mais nada, vamos entender que, se você está aqui lendo esse
artigo, você já deve estar pensando em automatizar suas planilhas do Excel
Online e vou supor que você já faz o desenvolvimento de suas soluções no VBA
(Visual Basic for Applications). </span >
artigo, você já deve estar pensando em automatizar suas planilhas do Excel
Online e vou supor que você já faz o desenvolvimento de suas soluções no VBA
(Visual Basic for Applications). </span >
Como desenvolvedor VBA de longa data, sei que nossa mente analítica está
preparada para fazer o desenvolvimento de forma estruturada… uma linha
após a outra, percorrendo as células para fazer a análise e posteriormente
fazendo a tomada de decisão. Os comandos são executados em nossas
sub-rotinas do início ao fim, salvo algumas raras exceções de desvio
causadas por Procedimentos específicos dentro do nosso código.</span >
preparada para fazer o desenvolvimento de forma estruturada… uma linha
após a outra, percorrendo as células para fazer a análise e posteriormente
fazendo a tomada de decisão. Os comandos são executados em nossas
sub-rotinas do início ao fim, salvo algumas raras exceções de desvio
causadas por Procedimentos específicos dentro do nosso código.</span >
No ambiente web, métodos tradicionais de análise do conteúdo das células
podem ser muito lentos ou simplesmente impossíveis de serem executados e, no
caso do Excel Online, o principal problema é que a cada alteração de uma
célula a planilha é salva. Este salvamento constante segura o processamento
e faz com que nossas rotinas tradicionais não sejam executadas
corretamente.</span >
podem ser muito lentos ou simplesmente impossíveis de serem executados e, no
caso do Excel Online, o principal problema é que a cada alteração de uma
célula a planilha é salva. Este salvamento constante segura o processamento
e faz com que nossas rotinas tradicionais não sejam executadas
corretamente.</span >
Para exemplificar isso, trato o código abaixo:</span >
function</span > main(workbook: ExcelScript</span >.Workbook) {
// Declaração das variáveis</span >
let</span > w1 = workbook.getWorksheet(‘Planilha1′</span >);
let</span > w2 = workbook.getWorksheet(‘Planilha2′</span >);
let</span > i:number;
let</span > w1_ln:number = 0</span >;
let</span > w1_col: number</span > = 0;
let</span > w2_ln: number</span > = 0;
let</span > w2_col: number</span > = 0;
let ultCel:number</span > = w2.getCell(w2.getRange().getRowCount() – 1</span >, 0).getRangeEdge(ExcelScript</span >.KeyboardDirection.up).getRowIndex();
//Apagando os dados anteriores</span >
w1.getRange(“A:B”</span >).getEntireColumn().delete;
w2.activate();
w2.getCell(w2_ln, w2_col).select();
//Percorrer cada linha e fazer a iteração</span >
//While – Até que a célula seja diferente de vazia</span >
//————————————————</span >
while</span > (w2.getCell(w2_ln, w2_col).getValue() != “”</span >) {
//Transfere os valores para outra planilha</span >
w1.getCell(w1_ln, w1_col).setValue(w2.getCell(w2_ln, w2_col).getValue());
w1.getCell(w1_ln, w1_col + 1</span >).setValue(w2.getCell(w2_ln, w2_col + 1</span >).getValue())
//Incrementar as variáveis</span >
w2_ln += 1</span >;
w1_ln += 1</span >;
}
}
</span >
A análise que vou fazer, começa na estrutura while do código acima. Você já
conhece as demais linhas, atribuições e inicializações de variáveis. Se não
conhece, lembre-se que há mais de 15 horas de conteúdo
no Youtube</a >
sobre o tema e ainda
um curso completo</a >
de fundamentos em meu portal que poderá ajudar no seu aprendizado.</span >
conhece as demais linhas, atribuições e inicializações de variáveis. Se não
conhece, lembre-se que há mais de 15 horas de conteúdo
no Youtube</a >
sobre o tema e ainda
um curso completo</a >
de fundamentos em meu portal que poderá ajudar no seu aprendizado.</span >
Abaixo, um print de como estão os dados na pasta de trabalho.</span >
O objetivo do código: Transferir os dados da Planilha2 para a
Planilha1, linha por linha (lembre-se: esse é um método não recomendado para
as planilhas online).</span >
</span >while</span > (w2.getCell(w2_ln, w2_col).getValue() != </span >“”</span >)</span ></span >
Este while captura o valor da célula definida na Planilha2 (w2) com o
controle de linha (w2_ln) e coluna (w2_col) para navegar pelas células
enquanto a célula não estiver vazia (!= “”).</span >
controle de linha (w2_ln) e coluna (w2_col) para navegar pelas células
enquanto a célula não estiver vazia (!= “”).</span >
Algumas linhas acima, w2_ln e w2_col estão valendo respectivamente 0 (zero)
e 0 (zero), ou seja: estamos mapeando a célula A1 da Planilha2 (lembre-se no
Office Script, as linhas e colunas são Base Zero).</span >
e 0 (zero), ou seja: estamos mapeando a célula A1 da Planilha2 (lembre-se no
Office Script, as linhas e colunas são Base Zero).</span >
Como a primeira célula está com valor (Nome), ela vai ser copiada para a
Planilha1 com as instruções abaixo:</span >
Planilha1 com as instruções abaixo:</span >
w1.getCell(w1_ln, w1_col).setValue(w2.getCell(w2_ln, w2_col).getValue());</span ></span >
</span >
Primeira instrução: Transfere para a célula na mesma posição em
Planilha1 (w1.getcell(w1_ln, w1_col).setValue(…), o conteúdo da célula que
está selecionada na Planilha2 (w2.getCell(w2_ln, w2_col).getValue()).</span >
Planilha1 (w1.getcell(w1_ln, w1_col).setValue(…), o conteúdo da célula que
está selecionada na Planilha2 (w2.getCell(w2_ln, w2_col).getValue()).</span >
</span >w1.getCell(w1_ln, w1_col + 1</span >).setValue(w2.getCell(w2_ln, w2_col + 1</span >).getValue())
</span >
Segunda Instrução: Faz exatamente o mesmo da instrução anterior, mas
com um pequeno detalhe: copia o conteúdo da célula à direita (coluna B) da
Planilha2 para a célula na mesma posição da coluna B na Planilha 1. Repare
que ao referenciar as células de controle de coluna (w1_col e w2_col) há um
operador +1 (para somar 1 ao número atual da coluna).</span >
com um pequeno detalhe: copia o conteúdo da célula à direita (coluna B) da
Planilha2 para a célula na mesma posição da coluna B na Planilha 1. Repare
que ao referenciar as células de controle de coluna (w1_col e w2_col) há um
operador +1 (para somar 1 ao número atual da coluna).</span >
Para fechar o ciclo, devemos fazer o incremento das variáveis de controle
de linha das 2 planilhas para que consigamos continuar a fazer a
transferência de valores:</span >
de linha das 2 planilhas para que consigamos continuar a fazer a
transferência de valores:</span >
w2_ln += 1;
w1_ln += 1;
</span >
E assim, percorrendo todas as linhas da Planilha2 vamos transferindo os
registros para a Planilha1!</span >
registros para a Planilha1!</span >
Agora, vou ler sua mente de novo: você está pensando
porque eu não fiz uma simples operação de cópia e colagem para a nova
planilha</b >?</span >
porque eu não fiz uma simples operação de cópia e colagem para a nova
planilha</b >?</span >
E a resposta é bem simples: não consigo simular todas as condições que você
precisa fazer em seu código no dia-a-dia. Essa proposta de exercício e aula
foi para mostrar para você que esse tipo de código não deve ser utilizado
pois, com a lentidão em percorrer linha a linha, em uma planilha com
milhares de linhas, esse procedimento poderá demorar horas. Extrapole “O que
foi feito” para “O que eu posso fazer a partir disso?”.</span >
precisa fazer em seu código no dia-a-dia. Essa proposta de exercício e aula
foi para mostrar para você que esse tipo de código não deve ser utilizado
pois, com a lentidão em percorrer linha a linha, em uma planilha com
milhares de linhas, esse procedimento poderá demorar horas. Extrapole “O que
foi feito” para “O que eu posso fazer a partir disso?”.</span >
Imagine juntar o conhecimento que você tem e que já foi obtido com os
artigos e com as aulas online sobre o uso de Arrays (clique aqui</a >)? Manipule tudo isso em objeto de memória, faça cálculos, agrupe as
informações, crie outros arrays de análise e depois simplesmente “cole” os
dados do array para sua planilha. </span >
artigos e com as aulas online sobre o uso de Arrays (clique aqui</a >)? Manipule tudo isso em objeto de memória, faça cálculos, agrupe as
informações, crie outros arrays de análise e depois simplesmente “cole” os
dados do array para sua planilha. </span >
O processo será muito rápido e eficiente!</span >
Não é complicado entender o processo e, no curso que gravei sobre o Office
Scripts em meu portal, há muito material complementar de como você pode
trabalhar com arrays. Há dezenas de métodos diferentes que fazem com que seu
código, rode muito mais eficientemente.</span >
Scripts em meu portal, há muito material complementar de como você pode
trabalhar com arrays. Há dezenas de métodos diferentes que fazem com que seu
código, rode muito mais eficientemente.</span >
Utilize o cupom: ARTIGOTROVATO e ganhe um desconto de 30% no
valor do curso. Esse cupom deve ser utilizado na hora do pagamento e é
exclusivo para você que leu o artigo e acompanha meus trabalhos por
aqui. </span >
valor do curso. Esse cupom deve ser utilizado na hora do pagamento e é
exclusivo para você que leu o artigo e acompanha meus trabalhos por
aqui. </span >
Você não vai ver a divulgação deste cupom em lugar nenhum mais.</span >
Agora é sua vez</b >… Pratique um pouco e escreva o código deste artigo (Não vale copiar e colar!). </i ></span >
Que assunto gostaria que eu escrevesse no próximo artigo? </b >
Deixe sua sugestão nos comentários!
✔ Para acesso ao conteúdo programático do curso clique aqui.
Convido você a ler outros artigos que já escrevi sobre
o Office Script:
Office Script | TypeScript – Método reduce para array
(dica)</a >
Office Script | TypeScript – Método reduceRight para array</a >
Office Script | Que tal estudar esta tecnologia agora?</a >
Office Script | Estrutura de decisão IF … ELSE IF … ELSE
…</a > – Artigo 1</span >
(dica)</a >
Office Script | TypeScript – Método reduceRight para array</a >
Office Script | Que tal estudar esta tecnologia agora?</a >
Office Script | Estrutura de decisão IF … ELSE IF … ELSE
…</a > – Artigo 1</span >
Office Script | Estrutura de decisão IF … ELSE IF … ELSE
…</a > – Artigo 2
Office Script | Estrutura de decisão SWITCH … CASE</a > – Artigo 1</span >
…</a > – Artigo 2
Office Script | Estrutura de decisão SWITCH … CASE</a > – Artigo 1</span >
Office Script | Como ativá-lo em sua organização</a >
Office Script | Como compartilhar seu script com outras
pessoas</a ></span >
Office Script | Como compartilhar seu script com outras
pessoas</a ></span >
</span >
</span > </span >
</span >