先日、Google スプレッドシートに 2 つのカスタム数式を作成して、基準に基づいて時間を追加する方法を示す投稿を作成しました (こちら)。私の意見では、彼らの問題は彼らが柔軟性に欠けていることです。 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