运行 表格单元格背景中的公式

Running a formula in the background of a cell on Sheets

我正在尝试制作一个 sheet,我可以在其中输入一个时间(持续时间)到一个没有冒号或小数的单元格中,它会显示在 相同的 单元格中带有冒号和小数(例如:输入“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"))

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

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

不要忘记修改 sheet 的名称(在我的示例中为“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。如果您有任何问题,请在评论中告诉我。