저번에 기준에 따라 시간을 추가하기 위해 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