Apps Script IF columns are filled THEN timestamp, IF columns are Empty 然后 CLEAR
Apps Script IF columns are filled THEN timestamp, IF columns are Empty then CLEAR
我有 A 列,它应该保留时间。如果在 B 到 G 列中输入了任何数据,则应在 A 列中输入时间戳,然后保持静态。如果这些列中的所有数据(B 列到 G 列为空),则 A 中的时间戳(如果存在)应该清除。
目前我的脚本正在运行,除了清除 A 列中的行。我知道我可能遗漏了一些愚蠢的东西,但我做错了!
function checkinTimeStamp(e){
var s = SpreadsheetApp.getActive();
var range = e.range;
var column = range.getColumn();
if (column == 2 || column == 3 || column == 4 || column == 5 || column == 6 || column == 7){
var timestamp = Utilities.formatDate(new Date, s.getSpreadsheetTimeZone(), "hh:mm");
var row = range.getRow();
var value = e.value || '';
var sheet = e.source.getActiveSheet();
if(sheet.getRange(row,1).getValue() ==""){
if(value !== ""){
sheet.getRange(row, 1).setValue(timestamp);
}
//if(sheet.getRange(row,1).getValue() !==""){
// sheet.getRange(row, 1).setValue(currentvalue);
}
// else{
if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
sheet.getRange(row, 1).setValue('');
}
}
}
以你的脚本为例,作为一个简单的修改,下面的修改如何?
发件人:
if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
sheet.getRange(row, 1).setValue('');
}
收件人:
if (sheet.getRange(row, 2, 1, 6).getValues()[0].join("") == "") {
sheet.getRange(row, 1).setValue('');
}
- 在此修改中,检索行值并将其与
""
进行比较。这样,当行的“B:G”列为空时,sheet.getRange(row, 1).setValue('')
是运行。
嘿,我尝试了一种不同的方法,使用 forEach 循环遍历每一行,首先查看 ColB 是否为空(如果为空,则清除时间戳)然后如果 ColB 中填充了项目,则打印时间戳。我已经分享了 运行 代码前后的图像。
function checkinTimeStamp(){
var s = SpreadsheetApp.getActiveSpreadsheet();
var sheet=s.getSheetByName('Sheet1');
var data=sheet.getDataRange().getValues();
var timezone = s.getSpreadsheetTimeZone();
var timestamp = Utilities.formatDate(new Date(), timezone, "hh:mm");
// Go through each row and if ColB is empty but ColA isn't, clear the timestamp in ColA
data.forEach(function(row,col){
if (col == '') return; //skip row 1 as title
if (row[0] == '') return; //skip if ColA is empty
if (row[1] != '') return //skip if ColB is NOT empty
sheet.getRange(col + 1,1).clearContent();
});
// Go through each row and if ColB is not empty put a timestamp in ColA
data.forEach(function(row,col){
if (col == '') return; //skip row 1 as title
if (row[1]== '') return; //skip if ColB is empty
sheet.getRange(col + 1,1).setValue(timestamp);
});
}
Before Running Code
After Running Code
我的样本 sheet 在这里:https://docs.google.com/spreadsheets/d/1IrEG_YNoUnesg78CDjlEwsVqssElZZ8znciqJC63D1Y/edit#gid=0
我有 A 列,它应该保留时间。如果在 B 到 G 列中输入了任何数据,则应在 A 列中输入时间戳,然后保持静态。如果这些列中的所有数据(B 列到 G 列为空),则 A 中的时间戳(如果存在)应该清除。
目前我的脚本正在运行,除了清除 A 列中的行。我知道我可能遗漏了一些愚蠢的东西,但我做错了!
function checkinTimeStamp(e){
var s = SpreadsheetApp.getActive();
var range = e.range;
var column = range.getColumn();
if (column == 2 || column == 3 || column == 4 || column == 5 || column == 6 || column == 7){
var timestamp = Utilities.formatDate(new Date, s.getSpreadsheetTimeZone(), "hh:mm");
var row = range.getRow();
var value = e.value || '';
var sheet = e.source.getActiveSheet();
if(sheet.getRange(row,1).getValue() ==""){
if(value !== ""){
sheet.getRange(row, 1).setValue(timestamp);
}
//if(sheet.getRange(row,1).getValue() !==""){
// sheet.getRange(row, 1).setValue(currentvalue);
}
// else{
if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
sheet.getRange(row, 1).setValue('');
}
}
}
以你的脚本为例,作为一个简单的修改,下面的修改如何?
发件人:
if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
sheet.getRange(row, 1).setValue('');
}
收件人:
if (sheet.getRange(row, 2, 1, 6).getValues()[0].join("") == "") {
sheet.getRange(row, 1).setValue('');
}
- 在此修改中,检索行值并将其与
""
进行比较。这样,当行的“B:G”列为空时,sheet.getRange(row, 1).setValue('')
是运行。
嘿,我尝试了一种不同的方法,使用 forEach 循环遍历每一行,首先查看 ColB 是否为空(如果为空,则清除时间戳)然后如果 ColB 中填充了项目,则打印时间戳。我已经分享了 运行 代码前后的图像。
function checkinTimeStamp(){
var s = SpreadsheetApp.getActiveSpreadsheet();
var sheet=s.getSheetByName('Sheet1');
var data=sheet.getDataRange().getValues();
var timezone = s.getSpreadsheetTimeZone();
var timestamp = Utilities.formatDate(new Date(), timezone, "hh:mm");
// Go through each row and if ColB is empty but ColA isn't, clear the timestamp in ColA
data.forEach(function(row,col){
if (col == '') return; //skip row 1 as title
if (row[0] == '') return; //skip if ColA is empty
if (row[1] != '') return //skip if ColB is NOT empty
sheet.getRange(col + 1,1).clearContent();
});
// Go through each row and if ColB is not empty put a timestamp in ColA
data.forEach(function(row,col){
if (col == '') return; //skip row 1 as title
if (row[1]== '') return; //skip if ColB is empty
sheet.getRange(col + 1,1).setValue(timestamp);
});
}
Before Running Code
After Running Code
我的样本 sheet 在这里:https://docs.google.com/spreadsheets/d/1IrEG_YNoUnesg78CDjlEwsVqssElZZ8znciqJC63D1Y/edit#gid=0