我正在尝试根据单元格的值在当前顶部行(第2行)上方自动插入一行。
我无法弄清楚需要输入到脚本编辑器中的变量。
我尝试使用Google搜索来寻求帮助,并修改了其他人的脚本以查看是否可以这样做,但答案是否定的,不,我没有知识/技能。
function conditionalNewRow() {
var ss = SpreadsheetApp.getActive().getSheetByName('NEW INV');
var sh = ss.getActiveSheet();
var headerRow = 1;
var firstRow = headerRow + 1;
var range = sh.getRange("A2"); // Get range of row 2.
var futureRange = sh.getRange("A3"); // Get range of row 3.
var numCols = range.getNumColumns(); // Get the number of columns for row 2.
var contentVal = false;
for (i = 1; i <= numCols; i++) {
var currentValue = range.getCell(1,i).getValue();
if (currentValue == "NO"){
contentVal = true;
break;
}
}
if (contentVal == true) {
sh.insertRowBefore(firstRow); // Insert an empty row into row 2.
futureRange.copyTo(sh.getRange(firstRow, 1, firstRow, numCols), {contentsOnly:false}); // Copy row 3 to row 2.
}
}
当单元格满足特定条件时,我想要的只是前一行上方的空白行;
例如单元格A2包含以下任何内容;是,否,已加载,已卸载
如果其中包含任何一个值,它将自动在上面插入一行。
答案 0 :(得分:1)
我不清楚您的意图和所遇到的问题。
我看到的几件事:
1)由于范围是单个单元格,var numCols = range.getNumColumns();
应该始终返回1,因此循环for (i = 1; i <= numCols; i++)
应该只运行一次。感觉这里有很多冗余代码。
要获取单元格A2的值,您可以编写:
var range = sh.getRange("A2");
var currentValue = range.getValue();
2)从if
语句来看,如果A2
的值不是“ NO”,则似乎只想添加新行。那是对的吗? (这不是您的问题所指出的)。如果是这样,我认为您与sh.insertRowBefore(firstRow);
语句非常接近,它可能会在一些复杂的逻辑中迷失方向。
3)您是否真的要将第3行中的所有内容复制到第2行中?在问题中,您需要声明“当一个单元格满足特定条件时,我所需要的只是上一行的空白行”。
也许这样的东西更接近您想要的?
function conditionalNewRow() {
var ss = SpreadsheetApp.getActive().getSheetByName("NEW INV");
var sh = ss.getActiveSheet();
var range = sh.getRange("A2"); // Get range of row 2.
var currentValue = range.getValue();
if (currentValue !== "NO") {
sh.insertRowBefore(firstRow); // Insert an empty row into row 2.
}
}
在您的注释中,听起来好像您想在将A2编辑为可选值之一时插入新行。您可能想检出simple triggers,例如onEdit
,该事件在编辑单元格时将运行。例如,如下所示:
/**
* The event handler triggered when editing the spreadsheet.
* @param {Event} e The onEdit event.
*/
function onEdit(e) {
// get sheet
var sheet = SpreadsheetApp.getActive().getSheetByName("NEW INV");
// Get the edited range
var editedRange = e.range;
// check if cell A2 was edited
if (editedRange.getA1Notation() === "A2") {
// check if value is a desired value
if (editedRange.getValue() === "YES" || "NO" || "LOADED" || "UNLOADED") {
// if yes to both, insert new row
sheet.insertRowBefore(2);
}
}
}