前幾天我發表了一篇文章,展示瞭如何為 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 並將其格式化為“持續時間”,並且工作表將返回到工作總和,就像使用本機公式一樣!
正如我在上一篇文章中所說,請留下您的評論以及任何建議或問題。擁抱。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3