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
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,我试图在谷歌表单中执行以下操作: 问题1: 单元格B2、B3和B4包含我要复制到C、D和E列最后一行的数据 下面的代码工作正常,它只获取工作表的最后一行,我无法将其定位到这些列 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sinput = ss.getSheetByName("DEPOSITS_WITHDRAWLS"); var soutput = ss.getSheetByName("DEPO

我试图在谷歌表单中执行以下操作:

问题1:

单元格B2、B3和B4包含我要复制到C、D和E列最后一行的数据

下面的代码工作正常,它只获取工作表的最后一行,我无法将其定位到这些列

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sinput = ss.getSheetByName("DEPOSITS_WITHDRAWLS");
  var soutput = ss.getSheetByName("DEPOSITS_WITHDRAWLS");
  var input = sinput.getRange(2, 2, 3).getValues();
  sinput.getRange(3,2, 2).clear();
  var flatin = [].concat.apply([], input);
  soutput.getRange(soutput.getLastRow()+1, 3,1,3).setValues([flatin]);
  soutput.insertRowAfter(soutput.getLastRow());
  Logger.log(input); 
问题2:

我在B1单元中做了一个下拉列表,其中有“选项1”和“选项2”

我想对它作一个假设。唯一的区别是,对于“选项1”,数据将转到C、D和E列的最后一行,对于“选项2”,数据将转到G、H和I列的最后一行。下面的代码看起来似乎可以工作,但我不太了解这种语言。是excel版的吗?不管怎样,我觉得这两种方法都很接近,但我完全不知道如何实现它们。非常感谢您的帮助。谢谢,祝你今天愉快

If optMemberName.Value = True Then
    With Sheets("Sheet1")
        Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Row) = txtMemberName.Text
    End With
ElseIf optMemberID.Value = True Then
    With Sheets("Sheet1")
        Range("B" & .Cells(.Rows.Count, "B").End(xlUp).Row) = txtMemberID.Text
    End With
End If
解释/问题:
  • 对于第一个问题,我认为问题与
    soutput.getLastRow()
    行有关。后者获取整个工作表中包含内容的最后一行。这意味着,如果工作表中包含内容的最后一行在A列中,例如在单元格
    A500
    中,则上述表达式将为您提供
    500
    ,无论最后一行的C、D或E是否不同。假设C、D和E具有相同的最后一行内容,您可以使用这种方法查找特定列的最后一行

  • 对于第二个问题,您发布的代码与javascript无关。您可以看到,您发布的两个代码段在结构和格式上有很大的不同。但逻辑是这样的。您需要一个
    if
    条件来检查单元格
    B1
    是否包含
    “选项1”
    “选项2”
    ,并根据该值粘贴到相应的范围

  • 我还对你的代码进行了一些优化。由于
    sinput
    soutput
    涉及同一张精确的表,因此没有理由使用两个不同的变量。您只需使用一个并将其命名为
    sheet
    。此外,我还看到了一些您在目标描述中没有描述的代码行。我删除了您清除某些值的行,并添加了额外的行。可以随意添加这些内容,但要尊重脚本的逻辑

解决方案:
谢谢你的澄清。我很感激你的鼓励,现在代码对我来说很有意义。
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("DEPOSITS_WITHDRAWLS");
  var input = sheet.getRange(2, 2, 3).getValues().flat(); 
  
  var option = sheet.getRange('B1').getValue();
  
  if (option == 'Option 1'){
  var Lrow = sheet.getRange('C:C').getValues().filter(String).length+1;
  sheet.getRange(Lrow, 3,1,3).setValues([input]);
  sheet.insertRowAfter(sheet.getLastRow());
  }
  
  else {
  var Lrow = sheet.getRange('G:G').getValues().filter(String).length+1;
  sheet.getRange(Lrow, 7,1,3).setValues([input]);
  sheet.insertRowAfter(sheet.getLastRow());
  }
  
}