Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何将所有数据从源工作表复制到目标工作表?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何将所有数据从源工作表复制到目标工作表?

Google apps script 如何将所有数据从源工作表复制到目标工作表?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我制作了一个谷歌表格,用于跟踪生产环境中的批号。现在,启用onEdit触发器时,源工作表中的数据只会使目标工作表中的第一行数据加倍。这是链接到。这是我目前掌握的代码: function onEdit(e) { if (e.range.getA1Notation() == 'N2') { if (/^\w+$/.test(e.value)) { eval(e.value)(); e.range.clear(

我制作了一个谷歌表格,用于跟踪生产环境中的批号。现在,启用onEdit触发器时,源工作表中的数据只会使目标工作表中的第一行数据加倍。这是链接到。这是我目前掌握的代码:

    function onEdit(e) {
      if (e.range.getA1Notation() == 'N2') {
        if (/^\w+$/.test(e.value)) {        
          eval(e.value)();
          e.range.clear();
        }
      }
    }
    function Reset() {
      var s = SpreadsheetApp.getActiveSheet();
      if( s.getName() == "Input" ) {
      var dataRange = s.getRange('A5:V14');
    var values = dataRange.clearContent();
    s.getRange("C5:C14").setValue('-');
    s.getRange("F5:F14").setValue('-');
    s.getRange("I5:I14").setValue('-');
    s.getRange("L5:L14").setValue('-');
      }
    }
    function Submit() {
      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName('Input');
      const targetSheet = ss.getSheetByName('Database');
      const data = sh.getRange(5,1,1,23).getValues(); // A5:W14
      targetSheet.getRange(targetSheet.getLastRow()+1,3,data.length,data[0].length).setValues(data);
    }

如果我正确理解了您的问题,您会担心,当您选择提交时,会在数据库工作表中重复插入数据。 可以假定这是由于Submit函数运行了两次。第一次检查/^\w+$/.test(e.value)时,第二次直接运行eval(e.value)()时。 我不确定这是错误还是功能:-)

请尝试此代码,它可以工作:

function onEdit(e) {
  if (e.range.getA1Notation() == 'N2') {
    var val = e.value;
    switch(val) {
      case 'Reset': Reset();
        break;
      case 'Submit': Submit();
        break;
    }
    e.range.clear();
  }
}
Upd.

双重插入是由于您使用了2个onEdit()触发器。查看当前项目的Edith/Triggers。删除它。

Upd2.

如果只希望在数据库工作表上显示10行中的已填充行,请使用以下代码。它根据H列中是否有某些文本(如成人或儿童)过滤行

function Submit() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('Input');
  var targetSheet = ss.getSheetByName('Database');
  var data = sh.getRange(5,1,10,23).getValues();
  Logger.log(data);
  var fData = data.filter(data => (data[13] != ""));
  Logger.log(fData);
  targetSheet.getRange(targetSheet.getLastRow()+1,3,fData.length,fData[0].length).setValues(fData);
}

您确定添加了正确的代码吗?onEdit函数不符合所描述的功能。请澄清您的问题是什么?代码只添加第一行两次的问题来自
Submit()
函数中的以下行:
const data=sh.getRange(5,1,1,23).getValues();//A5:W14
您告诉它只获取一行的方法。很抱歉造成混淆,我仍在学习应用程序脚本中的行话。我想问的是,如何使用Suffic()函数从“输入”表发送信息到“数据库”表,而不发送带有连字符的空白行。现在,函数只发送第一行两次,而不是“输入”表中键入的所有数据。“数据库”表将作为公司的生产记录。如果可能的话,我还想将“输入”表中B1单元格的日期发送到“数据库”表中的每一行,其中每一行都有当天提交的数据。这正是我想要的,谢谢!但是,我在尝试保存这行代码的“Syntax error.line:30 file:Code”时遇到以下错误:var fData=data.filter(data=>(data[13]!=”)在运行菜单中打开应用程序脚本V8。完美!这很有效,谢谢!