![](/img/trans.png)
[英]Google sheet script to match and copy based from another adjacent cell
[英]Check date and edit adjacent cell in Google Sheet with Google Script
我正在尝试编写一个脚本,如果日期等于或小于今天的日期,则在遍历包含日期的列的单元格值时,它将更改相邻单元格中的状态(当前与过期)。 该脚本需要处理电子表格中所有工作表的N列(日期)并修改O列(状态)。 这就是为什么在FYI中有Sheets循环的原因。
这是我到目前为止所拥有的,我一直在碰壁。
它当前在currentValue变量上引发错误,原因是超出范围。
//----------------------------------------------------
// Look at Dates and Change Status if expired (Automatically)
function checkDates() {
//For each sheet in the Spreadsheet
for(v in sheets){
//Find the last row that has content *-2 is because of a strange return I don't understand yet
var lastRow = sheets[v].getLastRow()-2;
//Get Dates Range (excluding empty cells)
var dateRange = sheets[v].getRange("N2:N"+lastRow);
//Get the number of Rows in the range
var numRows = dateRange.getNumRows();
//For loop for the number of rows with content
for(x = 0; x <= numRows; ++x){
// Value of cell in loop
var currentValue = dateRange.getCell(x,2).getValue();
Logger.log(currentValue);
// Row number in Range
var currentRow = dateRange.getRow(x);
// Get adjacent cell Range
var adjacentCell = sheets[v].getRange(currentRow,15);
// If the date is less than or equal to today
if(new Date(currentValue) <= d){
// Change adjancet cell to Expired
adjacentCell.setValue("Expired");
// Else adjance cell is Current
} else if(listofDates != ""){
adjacentCell.setValue("Current");
}
}
}
}
//-----------------------------------------------------
currentValue超出范围的原因是getCell(x, 2)
函数的第一个参数是行号。 您的行号从0开始, x = 0
。 如果将x更改为从1开始,则应停止显示currentValue变量超出范围的错误。
for(x = 1; x <= numRows; ++x){ ...
您还选择了两列,但只选择了“ N”行,将getCell(x, 2)
更改为getCell(x, 1)
。
var currentValue = dateRange.getCell(x,1).getValue();
正如我之前提到的,您的数据范围仅在colmn“ N”上方,如果同时选择列“ N”和“ O”,则可以使操作变得更加容易, var dateRange = sheets[v].getRange("N2:O");
我对脚本的其余部分做了一些修改。 它虽然不漂亮,但我希望它能对您有所帮助。
function checkDates() {
//For each sheet in the Spreadsheet
for(v in sheets){
var lastRow = sheets[v].getLastRow();
//Get Dates Range (excluding empty cells)
var dateRange = sheets[v].getRange(2, 14, (lastRow - 1), 2);
//Get the number of Rows in the range
var numRows = dateRange.getNumRows();
//For loop for the number of rows with content
for(x = 1; x <= numRows; ++x){
// Value of cell in loop
var currentValue = dateRange.getCell(x,1).getValue();
var adjacentCell = dateRange.getCell(x,2);
Logger.log(currentValue);
// If the date is less than or equal to today
if(new Date(currentValue) <= new Date()){
// Change adjancet cell to Expired
adjacentCell.setValue("Expired");
// Else adjance cell is Current
} else if(currentValue != ""){
adjacentCell.setValue("Current");
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.