”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Google 表格:持续时间(小时)的 SUMIFS,第 2 部分

Google 表格:持续时间(小时)的 SUMIFS,第 2 部分

发布于2024-11-08
浏览:590

Google Sheets: SUMIFS para durações (horas), parte 2

前几天我发表了一篇文章,展示了如何为 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 并将其格式化为“持续时间”,并且工作表将返回到工作总和,就像使用本机公式一样!

正如我在上一篇文章中所说,请留下您的评论以及任何建议或问题。拥抱。

版本声明 本文转载于:https://dev.to/casewinter/google-sheets-sumifs-para-duracoes-horas-parte-2-3bf0?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • React 的基本核心概念
    React 的基本核心概念
    在快速发展的 Web 开发世界中,React 仍然是构建动态和高性能用户界面的基石。无论您是经验丰富的开发人员还是刚刚起步的开发人员,了解 React 的核心概念对于充分发挥其潜力至关重要。在本文中,我们将探讨 React 的基本原理,从它的库状态到 hooks 的强大功能,并为您提供增强 Reac...
    编程 发布于2024-11-09
  • 如何防止 Chrome 的自动填充更改您的字体?
    如何防止 Chrome 的自动填充更改您的字体?
    克服 Chrome 的自动填充字体更改挑战在 Windows 上遇到 Chrome 的自动填充功能时,您可能会遇到烦人的字体更改问题。将鼠标悬停在已保存的用户名上时,字体大小和样式会发生变化,从而破坏表单的对齐方式。虽然您可以对输入应用固定宽度来缓解此问题,但更有效的解决方案在于完全防止字体更改。要...
    编程 发布于2024-11-09
  • Em 和 Rem:有什么区别?
    Em 和 Rem:有什么区别?
    简介:rem和em都是CSS中的大小单位。 Rem 是 root 元素的字体大小。 Em 是本地上下文的字体大小。 em 单位 是从印刷版式世界借来的,它是一个允许设置元素的字体大小相对于其组件层次结构中最接近的声明字体大小的单位。 rem 单元 是 root em 的缩写,始终引用根元素(即 元...
    编程 发布于2024-11-09
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-09
  • 修复 D3.js GeoJSON 绘图问题:如何纠正缠绕顺序?
    修复 D3.js GeoJSON 绘图问题:如何纠正缠绕顺序?
    D3.js 错误绘制 GeoJSON:缠绕顺序问题当尝试使用 geoJSON 数据可视化俄罗斯地区时,程序员遇到了一个问题其中 D3.js 绘制单个黑色矩形而不是所需的地图轮廓。这种差异是由于 geoJSON 文件中坐标的缠绕顺序问题引起的。了解缠绕顺序GeoJSON 坐标可以按顺时针或逆时针顺序排...
    编程 发布于2024-11-09
  • 多重继承的问题
    多重继承的问题
    Java不支持类的多重继承,标准方法不规避此限制,因为类可以维护状态(使用实例变量),但接口不能。 默认方法提供了行为多重继承的有限形式,允许一个类通过默认方法从多个接口继承行为。 当一个类实现的两个接口具有相同的默认方法时,可能会发生冲突,例如两个接口 Alpha 和 Beta 都使用了 res...
    编程 发布于2024-11-09
  • 如何避免 getImageData() 中的“画布已被跨域数据污染”错误?
    如何避免 getImageData() 中的“画布已被跨域数据污染”错误?
    如何避免 getImageData() 中出现“画布已被跨源数据污染”错误使用 getImageData( 时) 方法从画布检索像素数据,您可能会遇到错误“画布已被跨源数据污染”。当您尝试访问受从其他域加载的数据影响的画布上的像素数据时,会出现此错误。要了解此错误的原因,请考虑大多数浏览器中实现的安...
    编程 发布于2024-11-09
  • ## Promise.all:Node.js 中是并行执行还是顺序执行?
    ## Promise.all:Node.js 中是并行执行还是顺序执行?
    Promise.all:Node.js 中并行执行还是顺序执行?问题: Promise.all(iterable) 是否顺序处理 Promise 或并行?答案: Promise.all 不执行 Promise;相反,它只是同时等待多个承诺。 Promise 的计算和结果由调用 Promise.all...
    编程 发布于2024-11-09
  • 如何克服 Splinter/Selenium 中的 ElementClickInterceptedException:被其他拦截时单击元素的指南
    如何克服 Splinter/Selenium 中的 ElementClickInterceptedException:被其他拦截时单击元素的指南
    被其他人拦截时单击元素:在 Splinter/Selenium 中处理 ElementClickInterceptedException抓取网页时,单击某些元素可能会具有挑战性,因为模糊元素的存在。在 Selenium 中,当尝试单击被另一个元素遮挡的元素时,会引发 ElementClickInte...
    编程 发布于2024-11-09
  • Java Sound 可以播放 MP3 文件吗?
    Java Sound 可以播放 MP3 文件吗?
    Java Sound 默认不支持 MP3。对于特定 JRE 中支持的类型,请检查 AudioSystem.getAudioFileTypes()。有一种方法可以添加 MP3 支持。将基于 JMF 的 mp3plugin.jar 添加到项目的运行时类路径中。虽然 javax.sound.sampled...
    编程 发布于2024-11-09
  • HTML 创新
    HTML 创新
    HTML5 的创新方向错误。在某种程度上,我是一个有连续性的思考者,并尊重任何进步都是好的。然而,更进一步,语义标签的决定是糟糕的。 这是正确的!我对那件事采取了政治态度! ⭐ 语义元素一定是由非 HTML 开发人员想到的。书面经验没有价值,真正的 100% 对于 HTML5 语义元素的真实非营销术...
    编程 发布于2024-11-09
  • Redux 工具包:React Thunk 和 React Saga。向 Vishal Tiwari 学习。
    Redux 工具包:React Thunk 和 React Saga。向 Vishal Tiwari 学习。
    React Thunk 和 React Saga 是用于处理 React 应用程序中副作用的中间件库,特别是用于管理 API 调用等异步操作。两者通常与 Redux 一起使用,但用途和方法略有不同。 React Thunk 1. 概述: React ...
    编程 发布于2024-11-09
  • 如何使用并发在 Go 中高效地读写 CSV 文件?
    如何使用并发在 Go 中高效地读写 CSV 文件?
    Go 中高效的 CSV 读写Go 中高效读写 CSV 文件的任务涉及优化 I/O 操作。考虑以下代码片段,该代码片段读取 CSV 文件,对数据执行计算,并将结果写入新的 CSV 文件:package main import ( "encoding/csv" "f...
    编程 发布于2024-11-09
  • 以下是一些标题选项,请记住问题格式:

简单直接:

* 如何用JavaScript动态调整输入字段宽度?
* 创建响应式输入字段:JavaScript So
    以下是一些标题选项,请记住问题格式: 简单直接: * 如何用JavaScript动态调整输入字段宽度? * 创建响应式输入字段:JavaScript So
    动态调整输入字段的宽度以适应其输入动态调整输入字段的宽度以匹配其内容长度可以增强用户体验防止布局混乱。虽然设置固定宽度可能会导致多余的空间或截断文本,但动态方法可确保输入字段具有视觉吸引力和功能性。不幸的是,使用 CSS 的 min-width 属性设置最小宽度不适用于输入字段。然而,现代浏览器提供...
    编程 发布于2024-11-09
  • 如何使用 JavaScript 从 iFrame 重定向父窗口?
    如何使用 JavaScript 从 iFrame 重定向父窗口?
    从 iFrame 重定向父窗口如果父窗口中嵌入了 iFrame,则可能需要重定向父窗口窗口的位置更改为新的 URL。为了实现这一点,JavaScript 提供了一个简单的解决方案。使用 JavaScript 重定向父窗口在 iFrame 的 JavaScript 代码中,您可以使用以下方法: 重定向...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3