Javascript 基于单元格值添加行-Google脚本
我目前有这个脚本,它将在我的“startRow”下面添加行。代码可以工作,但它是静态的;在本例中,我的行是40,因为我希望在第40行中当前包含的内容下添加一个新行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
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);
}