首页 > 解决方案 > 通过脚本启用复选框时如何用值替换公式。(谷歌表格)

问题描述

我在谷歌标签的编程脚本方面绝对是零。对不起,如果我问了一个奇怪的问题,或者填写错误。我真的是这个网站的新手。

有一个工作表示例: A 列和 B 列只是数字 C 列和 D 列包含公式。比如 C2=(A2+B2), D2=(A2-B2)

例子 在此处输入图像描述

一项任务:当我单击该行旁边的按钮或复选框时,我想要它。此行上的所有值都作为值插入。(我的意思是,公式被删除并替换为值)并且复选框被删除。

我尝试通过录制宏并获取代码来做到这一点,但我仍然无法弄清楚:

  1. 如何激活复选框的脚本。
  2. 如何使每一行都有自己的复选框并且可以工作。
function _111() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('E2').activate();
  spreadsheet.getCurrentCell().setValue('TRUE');
  spreadsheet.getRange('A2:D2').activate();
  spreadsheet.getRange('A2:D2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('E2').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};

如果可以,请你帮助我。

MetaMan 的 UPD 特殊: 我的 TAB 工作表名称是“Sell tab” 在此处输入图像描述

标签: google-apps-scriptgoogle-sheets

解决方案


function onEdit(e) {
  //e.source.toast('entry');//debug
  const sh = e.range.getSheet();
  //sh.getRange('P1').setValue(JSON.stringify(e));//debug
  if(sh.getName()=='Sheet1' && e.range.columnStart==5 && e.range.rowStart>1 && e.value == "TRUE") {
    //e.source.toast('sheet');//debug
    sh.getRange(e.range.rowStart,3,1,2).setValues(sh.getRange(e.range.rowStart,3,1,2).getValues());
    sh.getRange(e.range.rowStart,e.range.columnStart).clearDataValidations().clearContent();
  }
}

演示:

在此处输入图像描述

onedit 触发器

清除数据验证

设置值(),获取值()

从我的调试行中删除注释可能对您有所帮助。如果您在 P1 中没有任何特别之处,我将在其中显示 onEdit 触发器的事件对象。我喜欢在调试问题时查看它。


推荐阅读