首页 > 解决方案 > 如何在 Google Apps 脚本中查找和替换值?

问题描述

我正在 Google 表格中构建一个简单的数据输入表单。用户完成特定字段(在工作表 A 中),然后单击提交按钮。然后将数据输入到另一张表(表 B)中。

我正在寻找一个脚本解决方案,它将从数据输入表单(表 A)中获取值,执行查找和替换(在脚本中),然后将替换的值放在表 B 中。一旦将数据输入表B,Sheet A 中的值将自动清空。

例子:

链接到 Google 表格: https ://docs.google.com/spreadsheets/d/10c1EX27WbINQOjN0UyE778gl8LguKp7MRKwQdaw0mu4/edit?usp=sharing

脚本:

function submitData() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Form"); //Form Sheet
  var datasheet = ss.getSheetByName("Form Data"); //Data Sheet
  
  //Input Values
  var values = [[formSS.getRange("L5").getValue(),
                 formSS.getRange("D18").getValue(),
                 formSS.getRange("D21").getValue(),
                 formSS.getRange("R18").getValue(),
                 formSS.getRange("R21").getValue(),
                 formSS.getRange("AF18").getValue(),
                 formSS.getRange("AF21").getValue(),
                 formSS.getRange("D33").getValue(),
                 formSS.getRange("D36").getValue(),
                 formSS.getRange("R33").getValue(),
                 formSS.getRange("R36").getValue(),
                 formSS.getRange("AF33").getValue(),
                 formSS.getRange("AF36").getValue(),
                 formSS.getRange("D48").getValue(),
                 formSS.getRange("D51").getValue(),
                 formSS.getRange("R48").getValue(),
                 formSS.getRange("R51").getValue(),
                 formSS.getRange("AF48").getValue(),
                 formSS.getRange("AF51").getValue(),
                 formSS.getRange("D63").getValue(),
                 formSS.getRange("D66").getValue(),
                 formSS.getRange("R63").getValue(),
                 formSS.getRange("R66").getValue(),
                 formSS.getRange("AF63").getValue(),
                 formSS.getRange("AF66").getValue()]];
  
  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 25).setValues(values);
}

任何人都可以帮忙吗?

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


解释:

用户输入的值为 PASS。在数据表中输入的值为 1。

用户输入的值为 FAIL。在数据表中输入的值为 0。

由于您已经有了这些值,您可以使用以下三元运算符实现上述转换:

var f_values = values.map(val=>val=='Pass'?1:val=='Fail'?0:val);

后者将遍历values数组并将每个值转换为:1 if val=='Pass'0 if val=='Fail'或保持原样,如果其他两种情况评估为假。


解决方案:

这就是您要查找的内容:

function submitData() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Form"); //Form Sheet
  var datasheet = ss.getSheetByName("Form Data"); //Data Sheet
  
  var values = [formSS.getRange("L5").getValue(),
                 formSS.getRange("D18").getValue(),
                 formSS.getRange("D21").getValue(),
                 formSS.getRange("R18").getValue(),
                 formSS.getRange("R21").getValue(),
                 formSS.getRange("AF18").getValue(),
                 formSS.getRange("AF21").getValue(),
                 formSS.getRange("D33").getValue(),
                 formSS.getRange("D36").getValue(),
                 formSS.getRange("R33").getValue(),
                 formSS.getRange("R36").getValue(),
                 formSS.getRange("AF33").getValue(),
                 formSS.getRange("AF36").getValue(),
                 formSS.getRange("D48").getValue(),
                 formSS.getRange("D51").getValue(),
                 formSS.getRange("R48").getValue(),
                 formSS.getRange("R51").getValue(),
                 formSS.getRange("AF48").getValue(),
                 formSS.getRange("AF51").getValue(),
                 formSS.getRange("D63").getValue(),
                 formSS.getRange("D66").getValue(),
                 formSS.getRange("R63").getValue(),
                 formSS.getRange("R66").getValue(),
                 formSS.getRange("AF63").getValue(),
                 formSS.getRange("AF66").getValue()];
  
  var f_values = values.map(val=>val=='Pass'?1:val=='Fail'?0:val);
  
  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 25).setValues([f_values]);
}

参考:

Array.prototype.map()

条件(三元)运算符


推荐阅读