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

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

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

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]刪除
最新教學 更多>
  • 如何在Python中高效率計算目錄大小?
    如何在Python中高效率計算目錄大小?
    使用 Python 進行目錄大小計算為了測量目錄的空間佔用情況,Python 提供了幾種方法。以下我們深入探討一個高效率、全面的解決方案:import os def directory_size(start_path): total_size = 0 for root, direct...
    程式設計 發佈於2024-11-09
  • 如何修復Go模組導入過時的套件版本?
    如何修復Go模組導入過時的套件版本?
    Go 模組匯入過時的套件版本嘗試使用Go 模組將新套件合併到專案時,您可能會遇到以下問題:儘管該套件被標記為“最新”,但模組系統會檢索該套件的過時版本。這個過時的版本可能缺少程式碼所需的功能,從而導致編譯或執行時錯誤。 解決方案:在 go.mod 檔案中指定版本Go 模組系統可讓您指定要匯入的套件的...
    程式設計 發佈於2024-11-09
  • 何時使用按值傳遞與按右值引用傳遞?
    何時使用按值傳遞與按右值引用傳遞?
    理解按值傳遞與按右側值引用傳遞定義函數參數時,在按值傳遞和按右值引用傳遞之間進行選擇可以顯著影響函數的介面和效率。 按值傳遞與按右值傳遞參考在按值傳遞中,會在函數內建立參數的副本。透過右值引用傳遞時,會建立對原始參數的引用,從而允許直接操作該參數。 介面中的差異右值引用參數的使用向呼叫者傳達以下訊息...
    程式設計 發佈於2024-11-09
  • 如何使用 Joda-Time 將日期字串轉換為日期時間物件?
    如何使用 Joda-Time 將日期字串轉換為日期時間物件?
    使用Joda 時間庫將日期字串轉換為DateTime 物件:嘗試轉換格式為「04/」的日期字串時02/2011 20:27:05” 到使用Joda-Time 庫的DateTime 對象,您可能會遇到指示格式無效的錯誤。出現此錯誤的原因是默認的DateTime 構造函數需要標準日期格式,該格式與提供的...
    程式設計 發佈於2024-11-09
  • PHP 中的多重繼承
    PHP 中的多重繼承
    繼承:繼承是物件導向程式設計(OOP)中的一個基本概念,它允許類別從其他類別繼承屬性和行為。它是一種基於現有類別創建新類別、促進程式碼重用以及在類別之間建立層次關係的機制。 繼承是基於「父子」或「超類別-子類別」關係的概念。另一個類別繼承自的類別稱為超類別或基底類,而從超類別繼承的類別稱為子類別或衍...
    程式設計 發佈於2024-11-09
  • 如何在處理 UTF-8 編碼的同時在 JavaScript 中解碼 Base64 字串?
    如何在處理 UTF-8 編碼的同時在 JavaScript 中解碼 Base64 字串?
    使用 JavaScript atob 解碼 Base64 函數:處理 UTF-8JavaScript 的 atob() 函數旨在解碼 Base64 編碼的字串。使用者在解碼 UTF-8 編碼字串時可能會遇到問題,導致產生 ASCII 編碼字元而不是正確的 UTF-8 表示形式。 挑戰:理解 Unic...
    程式設計 發佈於2024-11-09
  • 什麼是 Promise Disposer 模式及其運作方式?
    什麼是 Promise Disposer 模式及其運作方式?
    理解 Promise Disposer 模式您已經在程式碼中遇到了 Promise Disposer 模式,但其用途仍然難以捉摸。本文旨在闡明概念並演示其應用。 問題概述在您的程式碼片段中:function getDb() { return myDbDriver.getConnection();...
    程式設計 發佈於2024-11-09
  • 如何使用 JavaScript 檢測瀏覽器協議處理程序?
    如何使用 JavaScript 檢測瀏覽器協議處理程序?
    檢測瀏覽器協議處理程序:綜合指南創建自訂 URL 協議處理程序時,重要的是要考慮到可能未安裝處理程序的場景。本文詳細探討如何使用 JavaScript 偵測已註冊的協定處理程序。 協議處理程序檢測的需求如提供的程式碼片段所示,Web 應用程式依賴處理程序來處理特定的URL 方案,例如「http: /...
    程式設計 發佈於2024-11-09
  • 如何使用 PDO 計算 MySQL 中的行數?
    如何使用 PDO 計算 MySQL 中的行數?
    使用 PDO 計算行數在舊版 PHP 程式碼中,mysql_num_rows() 函式經常用於計算由MySQL 查詢。然而,隨著 PDO(PHP 資料物件)的採用,此功能不再可用。 對於 PDO,有其他方法可以實現相同的功能。一種選擇是使用 ->fetchColumn() 方法:$res = $DB...
    程式設計 發佈於2024-11-09
  • Nginx 在 https 埠上強制 http 轉為 https
    Nginx 在 https 埠上強制 http 轉為 https
    範例腳本 nginx : server { listen 443 default ssl; listen [::]:443 ssl; root /var/www/html/api_mobile/public; include snip...
    程式設計 發佈於2024-11-09
  • 如何使用 Google Maps API v2 取得行車路線?
    如何使用 Google Maps API v2 取得行車路線?
    使用Google Maps API v2 獲取行車路線您在問題中提到的請求使用了Google Maps API 的addPolyline 方法在兩點之間畫一條直線。此方法旨在在地圖上顯示簡單的線條,而不是用於檢索行車路線。 要取得兩個位置之間的詳細行車說明,您應該將 Google Maps Dire...
    程式設計 發佈於2024-11-09
  • 使用 React Query 建立 Feed 頁面
    使用 React Query 建立 Feed 頁面
    目标 在本文中,我们将探索如何使用 React Query 构建提要页面! 这是我们将要创建的内容: 本文不会涵盖构建应用程序所涉及的每个步骤和细节。 相反,我们将重点关注关键功能,特别是“无限滚动”和“滚动到顶部”功能。 如果您有兴趣咨询整个实现,您可以在此 GitHub 存...
    程式設計 發佈於2024-11-09
  • `useCallback` 與 `useMemo` 掛鉤
    `useCallback` 與 `useMemo` 掛鉤
    提升 React 效能:useCallback 與 useMemo Hooks React 的 useCallback 和 useMemo 掛鉤對於優化應用程式的效能至關重要。了解何時以及如何使用它們可以使您避免不必要的重新渲染並確保您的應用程式順利運行。在本文中,我們將深入研究有...
    程式設計 發佈於2024-11-09
  • jQuery 如何簡化 JSON 資料到 HTML 表的轉換?
    jQuery 如何簡化 JSON 資料到 HTML 表的轉換?
    jQuery 的JSON 到HTML 表格轉換的簡化方法將JSON 陣列轉換為HTML 表格可能是一項繁瑣的任務,但jQuery 簡化了這個過程要從JSON 陣列產生表,請使用getJSON() 函數檢索資料:$.getJSON(url , function(data) {接下來,建立表格主體:va...
    程式設計 發佈於2024-11-09
  • 如何從 Node.js 中的大型 Firebase 資料集中有效率地檢索隨機乘積?
    如何從 Node.js 中的大型 Firebase 資料集中有效率地檢索隨機乘積?
    如何在 Node Firebase 中檢索唯一的隨機乘積? Firebase 提供靈活的資料結構,讓您以分層方式儲存資料。在某些情況下,您可能擁有大量記錄,但只需要一筆唯一且隨機的記錄。本文將引導您透過兩種方法在 Node Firebase 中實現此目的。 經典方法:下載所有記錄假設您的資料庫結構類...
    程式設計 發佈於2024-11-09

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

Copyright© 2022 湘ICP备2022001581号-3