Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O objetivo dos Scripts do Office é automatizar séries de tarefas comumente executadas para economizar tempo. Um script lento pode parecer que não acelera seu fluxo de trabalho. Na maioria das vezes, seu script estará perfeitamente bem e funcionará conforme o esperado. No entanto, existem alguns cenários evitáveis que podem afetar o desempenho.
Reduzir o número de chamadas de leitura ou gravação
O motivo mais comum para um script lento é a comunicação excessiva com a pasta de trabalho. Isso é particularmente perceptível ao usar o Excel na Web. Em determinados momentos, o script sincroniza seus dados locais com os da pasta de trabalho. Isso significa que todas as operações de gravação (como workbook.addWorksheet()) só são aplicadas à pasta de trabalho quando essa sincronização nos bastidores acontece. Da mesma forma, todas as operações de leitura (como myRange.getValues()) só obtêm dados da pasta de trabalho para o script nesses momentos. Em ambos os casos, o script busca informações antes de agir sobre os dados. Por exemplo, o código a seguir registrará com precisão o número de linhas no intervalo usado.
let usedRange = workbook.getActiveWorksheet().getUsedRange();
let rowCount = usedRange.getRowCount();
// The script will read the range and row count from
// the workbook before logging the information.
console.log(rowCount);
As APIs de Scripts do Office garantem que todos os dados na pasta de trabalho ou no script sejam precisos e atualizados quando necessário. Você não precisa se preocupar com essas sincronizações para que o script seja executado corretamente. No entanto, ter conhecimento dessa comunicação entre script e nuvem pode ajudá-lo a evitar chamadas de rede desnecessárias.
Ler dados da pasta de trabalho fora de um loop
Qualquer método que obtenha dados da pasta de trabalho pode disparar uma chamada de rede. Em vez de fazer a mesma chamada repetidamente, você deve salvar os dados localmente sempre que possível. Isso é especialmente verdadeiro ao lidar com loops.
Considere um script para obter a contagem de números negativos no intervalo usado de uma planilha. O script precisa iterar em cada célula no intervalo usado. Para fazer isso, ele precisa do intervalo, do número de linhas e do número de colunas. Você deve armazená-las como variáveis locais antes de iniciar o loop. Caso contrário, cada iteração do loop forçará um retorno à pasta de trabalho.
/**
* This script provides the count of negative numbers that are present
* in the used range of the current worksheet.
*/
function main(workbook: ExcelScript.Workbook) {
// Get the working range.
let usedRange = workbook.getActiveWorksheet().getUsedRange();
// Save the values locally to avoid repeatedly asking the workbook.
let usedRangeValues = usedRange.getValues();
// Start the negative number counter.
let negativeCount = 0;
// Iterate over the entire range looking for negative numbers.
for (let i = 0; i < usedRangeValues.length; i++) {
for (let j = 0; j < usedRangeValues[i].length; j++) {
if (usedRangeValues[i][j] < 0) {
negativeCount++;
}
}
}
// Log the negative number count to the console.
console.log(negativeCount);
}
Observação
Como experiência, tente substituir usedRangeValues in the loop por usedRange.getValues(). Você pode notar que o script demora consideravelmente mais para ser executado ao lidar com intervalos grandes.
Evite usar try...catch blocos em loops ou ao redor deles
Não recomendamos o uso try...catch de instruções em loops ou loops circundantes. Isso ocorre pelo mesmo motivo pelo qual você deve evitar ler dados em um loop: cada iteração força o script a sincronizar com a pasta de trabalho para garantir que nenhum erro tenha sido gerado. A maioria dos erros pode ser evitada verificando os objetos retornados da pasta de trabalho. Por exemplo, o script a seguir verifica se a tabela retornada pela pasta de trabalho existe antes de tentar adicionar uma linha.
/**
* This script adds a row to "MyTable", if that table is present.
*/
function main(workbook: ExcelScript.Workbook) {
let table = workbook.getTable("MyTable");
// Check if the table exists.
if (table) {
// Add the row.
table.addRow(-1, ["2012", "Yes", "Maybe"]);
} else {
// Report the missing table.
console.log("MyTable not found.");
}
}
Remover instruções desnecessárias console.log
O registro em log do console é uma ferramenta vital para depurar seus scripts. No entanto, ele força o script a sincronizar com a pasta de trabalho para garantir que as informações registradas estejam atualizadas. Considere remover instruções de log desnecessárias (como as usadas para teste) antes de compartilhar seu script. Isso normalmente não causará um problema de desempenho perceptível, a menos que a console.log() instrução esteja em um loop.
Pausar cálculos enquanto os scripts são executados
Se o script alterar muitos valores, ele poderá disparar recálculos excessivos. Controle o mecanismo de cálculo do Excel definindo o modo de cálculo como "manual" enquanto o script é executado. Use Application.setCalculation para alternar o Excel para recalcular fórmulas manualmente. Certifique-se de retornar a pasta de trabalho para o modo de cálculo original quando terminar.
O exemplo a seguir mostra como alterar o modo de cálculo. Ele também demonstra como recalcular manualmente a pasta de trabalho com Application.calculate.
/**
* This script adjusts the calculation mode of the workbook and makes a manual recalculation.
* Wrap the CalculationMode changes around code that repeatedly updates values.
*/
function main(workbook: ExcelScript.Workbook) {
const application = workbook.getApplication();
// Turn off automatic calculations during the script.
application.setCalculationMode(ExcelScript.CalculationMode.manual);
// ...
// Perform a manual recalculation of the workbook.
application.calculate(ExcelScript.CalculationType.fullRebuild);
// ...
// Resume automatic calculations after the script finishes.
application.setCalculationMode(ExcelScript.CalculationMode.automatic);
}
Ajuda caso a caso
À medida que a plataforma de Scripts do Office se expande para trabalhar com o Power Automate, Cartões Adaptáveis e outros recursos entre produtos, os detalhes da comunicação script-pasta de trabalho tornam-se mais complexos. Se precisar de ajuda para acelerar a execução do seu script, entre em contato com o Microsoft Q&R. Certifique-se de marcar sua pergunta com "office-scripts-dev" para que os especialistas possam encontrá-la e obter ajuda.