」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Google 試算表:持續時間(小時)的 SUMIFS,第 2 部分

Google 試算表:持續時間(小時)的 SUMIFS,第 2 部分

發佈於2024-11-08
瀏覽:228

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

前幾天我發表了一篇文章,展示瞭如何為 Google 表格創建兩個自訂公式以根據條件添加小時數(此處)。我認為他們的問題是不靈活。如果我想要 N 個條件怎麼辦?好吧,現在你可以了!

現在公式採用 3 組資料:持續時間、條件和篩選器指令。 讓我們回到測試電子表格:

標題 期間 類別 地位 喜歡
火星人 01:00:00 電影 我已經看過了 是的
星際效應 02:49:00 電影 我已經看過了
約翰威克 01:30:00 電影 我已經看過了
復仇者聯盟:終局之戰 03:00:00 電影 我想看
怪奇物語 00:45:00 系列 參加
巫師 01:00:01 系列 參加
曼達洛人 00:40:00 系列 參加
絕命毒師 00:50:00 系列 我已經看過了 是的
紙屋 00:55:00 系列 我想看
權力的遊戲 01:10:00 系列 我想看

讓我們更新我們的應用程式腳本,我建議建立另一個測試電子表格並開始一個新的電子表格,記住時間必須採用「純文字」。代碼在這裡:

/**
 * 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);
}

假設我通過了:

電影 |我已經看過了 |不

我的總和是:04:19:00

並且請記住,我可以使用本機函數將其包裝:=VALUE 並將其格式化為“持續時間”,並且工作表將返回到工作總和,就像使用本機公式一樣!

正如我在上一篇文章中所說,請留下您的評論以及任何建議或問題。擁抱。

版本聲明 本文轉載於:https://dev.to/casewinter/google-sheets-sumifs-para-duracoes-horas-parte-2-3bf0?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3