Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/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
Javascript 基于单元格值添加行-Google脚本_Javascript_Google Apps Script - Fatal编程技术网

Javascript 基于单元格值添加行-Google脚本

Javascript 基于单元格值添加行-Google脚本,javascript,google-apps-script,Javascript,Google Apps Script,我目前有这个脚本,它将在我的“startRow”下面添加行。代码可以工作,但它是静态的;在本例中,我的行是40,因为我希望在第40行中当前包含的内容下添加一个新行 function addRows(){ var startRow = 40; var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getDataRange(); var numRows = rows.getNumRows(); sheet.i

我目前有这个脚本,它将在我的“startRow”下面添加行。代码可以工作,但它是静态的;在本例中,我的行是40,因为我希望在第40行中当前包含的内容下添加一个新行

function addRows(){
  var startRow = 40;
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();

  sheet.insertRowsAfter(startRow , 1);
}
但是,如果我要在第40行上方的工作表中插入一行,那么前面提到的内容将转移到第41行,我想在该行下方插入一行,但是由于该代码是静态的,所以它不会这样做

在单独的表格中,在单元格中 A1,我正在使用
=row()
函数拉入我想要的行数,因为这将是动态的。如果我在上面插入一行,数字将从40变为41,保持相同的示例

我想知道是否有一种方法可以将此代码转换为该单元格的
getValue
,并在该单元格中提供的行号下插入行,这样无论在第40行上方插入/删除多少行,它都会确切地知道我要在哪一行下插入新行

例如,假设我在40上方插入3行,我希望此脚本从我的
=row()
单元格(A1)中提取值,即(“43”),并在第43行下方插入新行

提前谢谢

编辑~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

为了进一步说明我为什么要这样做,我正在为提案建立一个电子表格,每个设备部分都有自己的产品和子产品数据验证下拉列表

每个部分的右侧都有自己的按钮,该按钮将在下面添加一个额外的行项目(行),以便在每个部分中添加更多的产品,同时保持数据验证下拉列表位于其上方的行中。(我只考了3分,这是我意识到我的问题的时候)

他们每个人都在运行自己版本的此函数,第一个在
startRow=40
,第二个在
startRow=43
,第三个在
startRow=46
。当我单独测试任何脚本(按钮)时,它们都会像预期的那样工作,并添加一行。但是假设我运行第一个脚本,然后尝试第二个脚本,它仍然会在43之后添加一行,同时我需要的是它在44之下添加,因为所有内容都被新插入的行压下了一行

下面是如果我只运行第二个按钮,电子表格的外观。它是正确的,并且将继续在应该添加的位置添加行,因为
startRow
没有更改,仍然是43

但是,假设我先运行按钮一,它在第40行之后插入一行,然后我尝试第二个按钮,它仍然会在43行之后插入一行,即使所有内容都被压下一行,我现在需要它在44行之后插入,以保持前一行的数据验证


我希望这能澄清这个项目背后的原因。

答案更新为最后一个元素

事实上,您必须为每个按钮指定一个函数,因为在使用附加到按钮的函数时无法添加参数

然后,您有另一个函数,它将根据名称搜索部分,并查找带有值的最后一个单元格

代码如下所示:

function button1(){
  var label = "VIDEO EQUIPEMENT";// For each button specify a function with label to search
  addRow(label);
}

function addRow(label){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//  var sheet = SpreadsheetApp.openById('SHEET_ID').getSheetByName('Sheet2')
  var data = sheet.getDataRange().getValues();
  for (var i = 0 ; i < data.length ; i++) {
    var line = data[i];
    if(line[0] == label){ // we use [0] as it is in column A
      var find = i ;
      break ;
    }
  }

  for (var i = find ; i < data.length ; i++) {
    var line = data[i];

    if(line[0] == ""){
       var lastLine = i ;
      break;
    }else{
      var lastLine = i+1 ;
    }
  }

  Logger.log(lastLine);

  // Then do What you want 
}
功能按钮1(){
var label=“VIDEO equipment”;//为每个按钮指定一个带有要搜索的标签的函数
addRow(标签);
}
函数addRow(标签){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//var sheet=SpreadsheetApp.openById('sheet_ID')。getSheetByName('Sheet2'))
var data=sheet.getDataRange().getValues();
对于(变量i=0;i
圣菲讷

  • 您使用
    =row()
    将行号动态存储在单独的电子表格中
  • 您希望动态检索此值并将其分配给
    insertRowsAfter()的
    var startRow
这就是你可以做到的: 参考资料:

嘿,斯特凡,谢谢你的快速回复。为了更好地解释这个问题,我在原来的帖子中添加了更多的上下文。谢谢你的评论!我试过了,它似乎调用了正确的单元格,但是当我试着运行它时,它返回了一个
错误值
。。。有什么想法吗?
function addRows(){
 //provided the row number is store in a different spreadsheet in a sheet called "savedRowSheet", cell "A1":
  var rowSheet=SpreadsheetApp.openById(YOUR SPREADSHEET_ID').getSheetByName('savedRowSheet');
  var rowValue=rowSheet.getRange('A1').getValue(); 
  var startRow = rowValue;
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.insertRowsAfter(startRow , 1);
}