Show Esta solução mostra como comparar dados entre dois arquivos Excel para encontrar discrepâncias. Ele usa Office scripts para analisar dados e Power Automate para se comunicar entre as guias de trabalho. Cenário de exemploVocê é um coordenador de eventos que está agendando palestrantes para próximas conferências. Você mantém os dados do evento em uma planilha e os registros do alto-falante em outra. Para garantir que as duas guias de trabalho sejam mantidas em sincronia, use um fluxo com Office Scripts para realçar quaisquer possíveis problemas. Exemplo Excel arquivosBaixe os arquivos a seguir para obter pastas de trabalho prontas para uso para o exemplo.
Adicione os scripts a seguir para experimentar o exemplo você mesmo! Código de exemplo: Obter dados de eventofunction main(workbook: ExcelScript.Workbook): string { // Get the first table in the "Keys" worksheet. let table = workbook.getWorksheet('Keys').getTables()[0]; // Get the rows in the event table. let range = table.getRangeBetweenHeaderAndTotal(); let rows = range.getValues(); // Save each row as an EventData object. This lets them be passed through Power Automate. let records: EventData[] = []; for (let row of rows) { let [eventId, date, location, capacity] = row; records.push({ eventId: eventId as string, date: date as number, location: location as string, capacity: capacity as number }) } // Log the event data to the console and return it for a flow. let stringResult = JSON.stringify(records); console.log(stringResult); return stringResult; } // An interface representing a row of event data. interface EventData { eventId: string date: number location: string capacity: number } function main(workbook: ExcelScript.Workbook, keys: string): string { // Get the first table in the "Transactions" worksheet. let table = workbook.getWorksheet('Transactions').getTables()[0]; // Clear the existing formatting in the table. let range = table.getRangeBetweenHeaderAndTotal(); range.clear(ExcelScript.ClearApplyTo.formats); // Compare the data in the table to the keys passed into the script. let keysObject = JSON.parse(keys) as EventData[]; let speakerSlotsRemaining = keysObject.map(value => value.capacity); let overallMatch = true; // Iterate over every row looking for differences from the other worksheet. let rows = range.getValues(); for (let i = 0; i < rows.length; i++) { let row = rows[i]; let [eventId, date, location, capacity] = row; let match = false; // Look at each key provided for a matching Event ID. for (let keyIndex = 0; keyIndex < keysObject.length; keyIndex++) { let event = keysObject[keyIndex]; if (event.eventId === eventId) { match = true; speakerSlotsRemaining[keyIndex]--; // If there's a match on the event ID, look for things that don't match and highlight them. if (event.date !== date) { overallMatch = false; range.getCell(i, 1).getFormat() .getFill() .setColor("FFFF00"); } if (event.location !== location) { overallMatch = false; range.getCell(i, 2).getFormat() .getFill() .setColor("FFFF00"); } break; } } // If no matching Event ID is found, highlight the Event ID's cell. if (!match) { overallMatch = false; range.getCell(i, 0).getFormat() .getFill() .setColor("FFFF00"); } } // Choose a message to send to the user. let returnString = "All the data is in the right order."; if (overallMatch === false) { returnString = "Mismatch found. Data requires your review."; } else if (speakerSlotsRemaining.find(remaining => remaining < 0)){ returnString = "Event potentially overbooked. Please review." } console.log("Returning: " + returnString); return returnString; } // An interface representing a row of event data. interface EventData { eventId: string date: number location: string capacity: number }Power Automate fluxo: Verifique se há inconsistências nas guias de trabalhoEsse fluxo extrai as informações de evento da primeira workbook e usa esses dados para validar a segunda workbook.
Ao longo do curso já utilizamos a função SE (IF). Que é usada para comparar informações e no caso da operação resultar verdadeiro executamos uma ação, caso falso executamos outra função. Vamos ver agora, quais são as diferenças para as novas funções IFS() e SWITCH() que veremos nessa seção. E em que diferem estas funções? – Na prática, os seus argumentos são similares. No entanto, a sintaxe é diferente e vai simplificado de função para função. Então, e qual será a mais eficiente? Em primeiro lugar, qual é a utilidade destas três funções? Em termos práticos, a clássica função SE() analisa condição a condição. Sendo que, quando esta é verdadeira, devolve um certo valor, quando é falsa devolve outro. Para além disso, quando analisamos várias condições, é necessário encadear vários SE(). Algo que pode tornar a expressão extensa e complexa. Para contornar este caso, e torná-lo mais simples, surgiram duas novas funções IFS(), que avalia uma ou várias condições, possibilitando passar para a próxima condição, quando o resultado não é válido e SWITCH(), onde cada expressão corresponde a um valor, devolvendo um certo resultado e, quando este não corresponde, passa ao próximo. Aqui trabalhamos com um valor pré-definido quando a condição não se verifica. Então, a pergunta que devemos fazer é, qual será a forma mais simples e curta de resolver a nossa necessidade? Isso é o que deverá nortear a escolha entre estas funções, vamos agora a elas. FunçõesA função SE() é expressa da seguinte forma: SE(expressao_logica; valor_se_verdadeiro; valor_se_falso). Que retorna um valor se uma expressão lógica for verdadeira e outro se for falsa. Verifique se valor_se_verdadeiro e valor_se_falso foram fornecidos para a função na ordem correta. Essa é a origem de problemas mais comum com SE. Sendo que: expressao_logica: uma expressão ou referência a uma célula que contém uma expressão que representa um valor lógico (ou seja, VERDADEIRO ou FALSO). valor_se_verdadeiro: o valor que a função retorna se expressao_logica for VERDADEIRO. valor_se_falso: [OPCIONAL, em branco por padrão] o valor que a função retorna se expressao_logica for FALSO. Vejamos no vídeo abaixo alguns exemplos de uso do SE: A função IFS() é expressa da seguinte forma: IFS(condição1, valor1, [condição2, valor2], …). Que avalia várias condições e retorna um valor correspondente à primeira condição verdadeira. Se todas as condições forem FALSO, #NÃO.DISP será retornado. Sendo que: condição: a primeira condição a ser avaliada. Pode ser um booliano, um número, uma matriz ou uma referência a qualquer um desses itens. valor1: o valor retornado se condição1 for TRUE. condicao2, valor2, …: condições e valores adicionais se a primeira condição avaliada for falsa. Vejamos no vídeo abaixo alguns exemplos de uso do IFS: A função SWITCH() é expressa da seguinte forma: SWITCH(expressão; caso1; valor1; [caso2; valor2; …]; [padrão]). Que compara uma expressão com uma lista de casos e retorna o valor do primeiro caso correspondente, com um valor padrão opcional caso não existam correspondências. Sendo que: condição: a primeira condição a ser avaliada. Pode ser um booliano, um número, uma matriz ou uma referência a qualquer um desses itens. expressão: qualquer valor válido. caso1: o primeiro caso a ser verificado em relação à expressão. valor1: o valor correspondente a ser retornado se caso1 corresponder à expressão. caso2; valor2;… [opcional]: outros casos e valores se o primeiro não corresponder à expressão. padrão [opcional]: um valor opcional, especificado como o último parâmetro, que será retornado se nenhum dos casos corresponder à expressão. Vejamos no vídeo abaixo alguns exemplos de uso do SWITCH: |