"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Google Sheets : SUMIFS pour les durées (heures), partie 2

Google Sheets : SUMIFS pour les durées (heures), partie 2

Publié le 2024-11-08
Parcourir:479

Google Sheets: SUMIFS para durações (horas), parte 2

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.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/casewinter/google-sheets-sumifs-para-duracoes-horas-parte-2-3bf0?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

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