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

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

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

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]删除
最新教程 更多>
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-14
  • Ruby on Rails前端加速:Classless或Classlight CSS框架
    Ruby on Rails前端加速:Classless或Classlight CSS框架
    Inicie um Novo Aplicativo Rails O time antes do comando rails serve para exibir no final da execução do comando o seu tempo de execução. No e...
    编程 发布于2025-04-14
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, attributeError:SomeClass实...
    编程 发布于2025-04-14
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-14
  • 在Go语言中嵌入互斥锁是否合适?
    在Go语言中嵌入互斥锁是否合适?
    嵌入mutex in go:何时是正确的方法?在GO中,Mutexes在管理同时数据访问中起着至关重要的作用。在与结构合作时,开发人员面临着是否将MUTEX嵌入结构本身或使用本地或全局静音的困境。 确保Mutex与其保护的数据紧密相关联,使其目的清晰。构造的每个实例都有其专用的Mutex,可以单独...
    编程 发布于2025-04-14
  • 如何自定义选择框箭头以兼容多浏览器?
    如何自定义选择框箭头以兼容多浏览器?
    customizing select select select select androw Emply for cross-browser兼容性,以增强选择元素的美学,它是常见的,它是用自定义映像替换默认箭头的。但是,实现此跨浏览器的兼容性可能是一个挑战。要解决此问题,请考虑将以下代码合并到您...
    编程 发布于2025-04-14
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-04-14
  • 如何在ASP.NET页面外访问会话变量?
    如何在ASP.NET页面外访问会话变量?
    从外部页面或控件访问ASP.NET会话变量 [2 经常,ASP.NET开发人员需要从外部到页面或控制上下文的类访问会话变量。 本指南概述了两种有效的方法: Method 1: Leveraging System.Web.HttpContext.Current.Session 此直接方法提供了从任何...
    编程 发布于2025-04-14
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-04-14
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    编程 发布于2025-04-14
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-04-14
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-14
  • jQuery append()为何有时阻碍脚本.onload事件触发?
    jQuery append()为何有时阻碍脚本.onload事件触发?
    在尝试按特定顺序加载脚本时,将脚本顺序加载脚本,确保将Onload Event触发为预期是至关重要的。但是,使用jQuery的append()方法将脚本元素添加到DOM中有时可以防止onload事件发射。 解决此问题,必须进行两次调整:附加Onload事件后,SRC属性属于脚本元素。这可以确保脚...
    编程 发布于2025-04-14
  • MySQL新手资源与教程大全
    MySQL新手资源与教程大全
    MySQL学习路径包括基础知识、核心概念、使用示例和优化技巧。1)了解表、行、列、SQL查询等基础概念。2)学习MySQL的定义、工作原理和优势。3)掌握基本CRUD操作和高级用法,如索引和存储过程。4)熟悉常见错误调试和性能优化建议,如合理使用索引和优化查询。通过这些步骤,你将全面掌握MySQL的...
    编程 发布于2025-04-14
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-04-14

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

Copyright© 2022 湘ICP备2022001581号-3