>웹 프론트엔드 >JS 튜토리얼 >Google 스프레드시트: 기간(시간)에 대한 SUMIFS, 2부

Google 스프레드시트: 기간(시간)에 대한 SUMIFS, 2부

WBOY
WBOY원래의
2024-08-17 08:42:311175검색

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

요즘 기준에 따라 시간을 추가하기 위해 Google 시트에 대한 두 가지 맞춤 수식을 만드는 방법을 보여주는 게시물을 만들었습니다(여기). 내 생각에 그들의 문제는 그들이 융통성이 없다는 것이다. N 기준을 원하면 어떻게 되나요? 이제 가능합니다!

이제 수식은 기간, 기준, 필터링 지침 등 3가지 데이터 세트를 사용합니다. 테스트 스프레드시트로 돌아가 보겠습니다.

Título Duração Categoria Status Curti
Perdido em Marte 01:00:00 Filme Já assisti Sim
Interestelar 02:49:00 Filme Já assisti Não
John Wick 01:30:00 Filme Já assisti Não
Vingadores: Ultimato 03:00:00 Filme Quero assistir
Stranger Things 00:45:00 Série Assistindo
The Witcher 01:00:01 Série Assistindo
O Mandaloriano 00:40:00 Série Assistindo
Breaking Bad 00:50:00 Série Já assisti Sim
A Casa de Papel 00:55:00 Série Quero assistir
Game of Thrones 01:10:00 Série Quero assistir

앱 스크립트를 업데이트하겠습니다. 또 다른 테스트 스프레드시트를 만들고 새 스프레드시트를 시작하는 것이 좋습니다. 이때 시간은 '일반 텍스트'여야 한다는 점을 기억하세요. 코드는 여기에 있습니다:

/**
 * 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<string>} duracoes - Array de durações em formato de texto.
 * @param {Array<Array<string>>} dados - Matriz de dados onde cada linha corresponde a um conjunto de valores.
 * @param {Array<string>} criterios - Array de critérios para filtrar as linhas da matriz de dados.
 * @returns {Array<string>} 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 < linhas_na_matriz; linha++) {
    let incluirLinha = true;

    for (let coluna = 0; coluna < dados[linha].length; coluna++) {
      if (!criterios.includes(dados[linha][coluna])) {
        incluirLinha = false;
        break; // Sai do loop se algum critério não for atendido
      }
    }

    if (incluirLinha) {
      matriz_de_criterios_concatenada.push(duracoes[linha]);
    }
  }

  return matriz_de_criterios_concatenada;
}

/**
 * Soma as horas filtradas de acordo com os critérios fornecidos.
 *
 * @param {Array<string>} duracoes - Array de durações em formato de texto.
 * @param {Array<Array<string>>} 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);
}

합격했다고 가정해 보겠습니다.

영화 | 나는 이미 그것을 보았다 | 아니요

내 합계는 다음과 같습니다: 04:19:00

그리고 이것을 기본 함수인 =VALUE로 래핑하고 "기간"으로 형식을 지정하면 시트가 기본 수식을 사용하는 것처럼 합계를 다시 계산할 수 있다는 점을 기억하세요!

지난 게시물에서 말씀드렸듯이, 제안이나 질문을 댓글로 남겨주세요. 포옹.

위 내용은 Google 스프레드시트: 기간(시간)에 대한 SUMIFS, 2부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.