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

WBOY
發布: 2024-08-17 08:42:31
原創
963 人瀏覽過

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} 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 < 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} 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 並將其格式化為“持續時間”,工作表將再次計算總和,就像使用本機公式一樣!

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

以上是Google 試算表:持續時間(小時)的 SUMIFS,第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!