На днях я опубликовал сообщение, показывающее, как создать две специальные формулы для таблиц 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