【问题标题】:Running a formula in the background of a cell on Sheets在表格的单元格背景中运行公式
【发布时间】:2020-07-24 22:37:05
【问题描述】:

我正在尝试制作一张表格,我可以在其中将时间(持续时间)输入到没有冒号或小数的单元格中,并且它显示在带有冒号和小数的 same 单元格中(例如:输入“10342”,单元格显示“1:03.42”)。我在另一个单元格中的公式是:

=ARRAYFORMULA(TEXT(AVERAGE(VALUE(IF(D3<>"", TEXT(
 IF(IFERROR(      LEFT(D3, LEN(D3)-6))="",      0,         LEFT(D3, LEN(D3)-6))&":"&
 IF(IFERROR(RIGHT(LEFT(D3, LEN(D3)-4), 2))="", "00", RIGHT(LEFT(D3, LEN(D3)-4), 2))&":"& 
 IF(IFERROR(RIGHT(LEFT(D3, LEN(D3)-2), 2))="", "00", RIGHT(LEFT(D3, LEN(D3)-2), 2))&"."& 
 IF(LEN(D3)>1, RIGHT(D3, 2), "0"&D3), "[h]:mm:ss.00"), ))), "[h]:mm:ss.00"))

我尝试过条件格式,但我不是最擅长使用宏。无论如何,这可能吗?

【问题讨论】:

标签: google-apps-script google-sheets formula background-process duration


【解决方案1】:

您显然需要一个 onEdit 函数。您必须在电子表格文件中打开脚本编辑器并复制粘贴我在此处提供的代码 sn-p。使用以下代码,每次编辑“Sheet1”的A 列 中的单元格时,您都会将所需的输入格式返回到完全相同的单元格中。如果您输入的值是: 10342 ,它将变为: 1:03.42 。如果您输入的值是 130342 ,您将返回 13:03.42 。如果您只想在第 1 行之后编辑单元格(如果您有标题),您可以在 if 条件语句中添加条件:row >1。

  function onEdit(e) {
  
  var row = e.range.getRow();
  var col = e.range.getColumn();
  
  if (col === 1 && e.source.getActiveSheet().getName() === "Sheet1"){
   
   var valu = e.source.getActiveSheet().getRange(row,1).getValue().toString()
   
   if (valu.length == 5){
    var result =  valu.slice(0,1)+":"+valu.slice(1,3)+"."+valu.slice(-2);
  } 
  else if ( valu.length==6) {
  var result = valu.slice(0,2)+":"+valu.slice(2,4)+"."+valu.slice(-2);
  }
   e.source.getActiveSheet().getRange(row,1).setValue(result); 
  }
  
}

不要忘记修改工作表的名称(在我的例子中是“Sheet1”)以及您要使用的列。如您所见,我的解决方案使用col===1e.source.getActiveSheet().getRange(row,1).setValue(result)var valu = e.source.getActiveSheet().getRange(row,1).getValue().toString()。数字 1 对应于 A 列。例如,如果要使用 D 列,则需要将所有这些公式的 1 替换为 4。如果您有任何问题,请在 cmets 中告诉我。

【讨论】:

  • 那行得通。现在我很好奇如何让它在不止一列上工作。我尝试将“col === 1”更改为“>0”,但随后它停止工作。我也希望获得这些时间的平均值。使用上面列出的公式,我得到了一个值,即持续时间,所以当我将它乘以 86400 时,它会给我相同的时间,但以秒为单位,允许工作表计算出平均值。我已经尝试在其中添加该公式,但它不能用作脚本。
  • 为了对不同的列应用相同的逻辑,您可以编辑我提供的代码或复制 onEdit 函数并更改列号。如果它回答了您最初的问题,请接受我的回答。我将能够在不同的帖子中回答您的其他问题。我认为您的其他问题与电子表格文件的格式有关。如果您认为我的回答有用,请接受我的回答。
  • 好的,我已经完成了所有这些工作。我从某一行开始,有没有办法让它在某一行停止,比如从第 4 行开始,到第 9 行结束?
  • 用这个替换第一个 if 语句 (col === 1 && e.source.getActiveSheet().getName() === "Sheet1" && row>3 && row
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 2014-10-08
  • 2021-08-16
  • 2019-10-21
  • 1970-01-01
  • 2017-06-26
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多