Office Script - O que você deve EVITAR nos seus scripts

Imagem como o texto em destaque sobre o Office Script

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.

Vamos entender neste artigo o que não devemos mais fazer em nossas rotinas no Office Script.

Se você prefere um vídeo ao invés do artigo, então clique aqui para ter acesso a aula gravada sobre o assunto.

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). 

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.

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.

Para exemplificar isso, trato o código abaixo:

function main(workbook: ExcelScript.Workbook) {

    // Declaração das variáveis
    let w1 = workbook.getWorksheet('Planilha1');
    let w2 = workbook.getWorksheet('Planilha2');
    let i:number;
    let w1_ln:number = 0;
    let w1_col: number = 0;
    let w2_ln: number = 0;
    let w2_col: number = 0;

let ultCel:number = w2.getCell(w2.getRange().getRowCount() - 10).getRangeEdge(ExcelScript.KeyboardDirection.up).getRowIndex();

    //Apagando os dados anteriores
    w1.getRange("A:B").getEntireColumn().delete;
    w2.activate();
    w2.getCell(w2_ln, w2_col).select();

    //Percorrer cada linha e fazer a iteração
    //While - Até que a célula seja diferente de vazia
    //------------------------------------------------
    while (w2.getCell(w2_ln, w2_col).getValue() != "") {
        
        //Transfere os valores para outra planilha
        w1.getCell(w1_ln, w1_col).setValue(w2.getCell(w2_ln, w2_col).getValue());
        w1.getCell(w1_ln, w1_col + 1).setValue(w2.getCell(w2_ln, w2_col + 1).getValue())

        //Incrementar as variáveis
        w2_ln += 1;
        w1_ln += 1;
    }
}

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 sobre o tema e ainda um curso completo de fundamentos em meu portal que poderá ajudar no seu aprendizado.

Abaixo, um print de como estão os dados na pasta de trabalho.


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).

 while (w2.getCell(w2_ln, w2_col).getValue() != "")

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 (!= "").

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).

Como a primeira célula está com valor (Nome), ela vai ser copiada para a Planilha1 com as instruções abaixo:

w1.getCell(w1_ln, w1_col).setValue(w2.getCell(w2_ln, w2_col).getValue());

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()).

      w1.getCell(w1_ln, w1_col + 1).setValue(w2.getCell(w2_ln, w2_col + 1).getValue())

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).

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:

w2_ln += 1;
w1_ln += 1;

E assim, percorrendo todas as linhas da Planilha2 vamos transferindo os registros para a Planilha1!

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?

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?".

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)? 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. 

O processo será muito rápido e eficiente!

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.

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. 

Você não vai ver a divulgação deste cupom em lugar nenhum mais.

Clique aqui para adquirir o curso com 30% de desconto.


Agora é sua vez... Pratique um pouco e escreva o código deste artigo (Não vale copiar e colar!). 

Que assunto gostaria que eu escrevesse no próximo artigo?
Deixe sua sugestão nos comentários!

✔ Para acesso ao conteúdo programático do curso clique aqui.

Imagem com uma representação do Office Script

Convido você a ler outros artigos que já escrevi sobre o Office Script:


Até o próximo artigo!



Alessandro Trovato
Compartilhando conhecimento, sempre!



#typescript #officescript #excelonline #excelscript #trovato #mvp #mvpbr #cursostrovato #if #elseif #excelonlinescript




Mais vendidos Amazon





Postagem Anterior Próxima Postagem