【问题标题】:How to Find & Replace Value in Google Apps Script?如何在 Google Apps 脚本中查找和替换值?
【发布时间】:2020-09-17 00:48:42
【问题描述】:

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

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

例子:

  • 用户输入的值为 PASS。在数据表单中输入的值为 1。
  • 用户输入的值为失败。在数据表中输入的值为 0。

链接到 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);
}

谁能帮忙?

【问题讨论】:

  • 你能分享你的脚本吗?无法从共享文档中看到它
  • 到目前为止,我用脚本的副本更新了我的问题
  • @TravisChristianson 出于文档目的,如果它解决了您的问题,请接受答案。

标签: javascript google-apps-script google-sheets


【解决方案1】:

解释:

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

用户输入的值为失败。在数据表中输入的值为 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()

Conditional (ternary) operator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多