L'autre jour, j'ai publié un article montrant comment créer deux formules personnalisées pour les feuilles Google afin d'ajouter des heures en fonction de critères (ici). Leur problème, à mon avis, c'est qu'ils n'étaient pas flexibles. Et si je veux N critères ? Eh bien, maintenant vous pouvez !
Maintenant, la formule prend 3 ensembles de données : les durées, les critères et les instructions de filtrage. Revenons à la feuille de calcul de test :
Titre | Durée | Catégorie | Statut | Comme |
---|---|---|---|---|
Le Martien | 01:00:00 | Film | Je l'ai déjà regardé | Oui |
Interstellaire | 02:49:00 | Film | Je l'ai déjà regardé | Non |
John Wick | 01:30:00 | Film | Je l'ai déjà regardé | Non |
Avengers : Fin de partie | 03:00:00 | Film | Je veux regarder | |
Choses étranges | 00:45:00 | Série | Participer | |
Le sorceleur | 01:00:01 | Série | Participer | |
Le Mandalorien | 00:40:00 | Série | Participer | |
Briser le mauvais | 00:50:00 | Série | Je l'ai déjà regardé | Oui |
La Maison du Papier | 00:55:00 | Série | Je veux regarder | |
Game of Thrones | 01:10:00 | Série | Je veux regarder |
Mettons à jour notre script d'application, je suggère de créer une autre feuille de calcul de test et d'en démarrer une nouvelle, en nous rappelant que les heures doivent être en « texte brut ». Le code est ici :
/** * Converte uma string no formato HH:MM:SS para o total em segundos. * * @param {string} hms - A string no formato HH:MM:SS. * @returns {number} O total em segundos. */ function converterHMSParaSegundos(hms) { const partes = String(hms).split(":"); const [horas, minutos, segundos] = partes; return Number(horas) * 3600 Number(minutos) * 60 Number(segundos); } /** * Converte um número de segundos para o formato HH:MM:SS. * * @param {number} segundos - O total de segundos. * @returns {string} O tempo no formato HH:MM:SS. */ function converterSegundosParaHMS(segundos) { const horas = Math.floor(segundos / 3600); const minutos = Math.floor((segundos % 3600) / 60); const segundosRestantes = segundos % 60; return `${String(horas).padStart(2, "0")}:${String(minutos).padStart( 2, "0" )}:${String(segundosRestantes).padStart(2, "0")}`; } /** * Filtra as linhas da matriz de dados com base nos critérios fornecidos e retorna as durações correspondentes. * * @param {Array} duracoes - Array de durações em formato de texto. * @param {Array >} dados - Matriz de dados onde cada linha corresponde a um conjunto de valores. * @param {Array } criterios - Array de critérios para filtrar as linhas da matriz de dados. * @returns {Array } Retorna as durações que correspondem aos critérios. */ function filtroDeLinhas(duracoes, dados, criterios) { const linhas_na_matriz = duracoes.length; const matriz_de_criterios_concatenada = []; for (let linha = 0; linha } duracoes - Array de durações em formato de texto. * @param {Array >} intervalo_de_criterios - Matriz de dados onde cada linha corresponde a um conjunto de valores. * @param {...string} criterios - Um ou mais critérios para filtrar as linhas da matriz de dados. * @returns {string} A soma das durações no formato HH:MM:SS. */ function somarHorasComCriterios( duracoes, intervalo_de_criterios, ...criterios ) { // Verifica se todos os argumentos são arrays if ( !Array.isArray(duracoes) || !Array.isArray(intervalo_de_criterios) || !Array.isArray(criterios) ) { return "Passe os intervalos para o cálculo!"; } const horasParaSomar = filtroDeLinhas( duracoes, intervalo_de_criterios, criterios.flat(Infinity) ); const horasEmSegundos = horasParaSomar.map((n) => converterHMSParaSegundos(n) ); const somaDosSegundos = horasEmSegundos.reduce( (acumulador, valorAtual) => acumulador valorAtual, 0 ); return converterSegundosParaHMS(somaDosSegundos); }
Disons que je réussis :
Cinéma | Je l'ai déjà regardé | Non
Ma somme serait : 04:19:00
Et rappelez-vous que je peux envelopper cela avec la fonction native : =VALEUR et le formater en « durée » et les feuilles reviennent aux sommes de travail comme si elles utilisaient une formule native !
Comme je l'ai dit dans le dernier post, laissez vos commentaires avec toutes suggestions ou questions. Câlins.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3