Google apps script 检查今天是否在单元格中';s日期,然后继续
我在互联网上找到了一个脚本,正在尝试对它进行一些修改,以满足我的需要。但是偶然发现了一个问题。脚本从下拉菜单中获取书签列表,如果在下一个单元格中写入OK,则会将该行传输到选定书签。我想确认今天的日期 这张纸的复印件。这里也有些不同 var=7; var-nameCol=6 试着这样做:Google apps script 检查今天是否在单元格中';s日期,然后继续,google-apps-script,Google Apps Script,我在互联网上找到了一个脚本,正在尝试对它进行一些修改,以满足我的需要。但是偶然发现了一个问题。脚本从下拉菜单中获取书签列表,如果在下一个单元格中写入OK,则会将该行传输到选定书签。我想确认今天的日期 这张纸的复印件。这里也有些不同 var=7; var-nameCol=6 试着这样做: function onEdit(e) { var ss = e.source; var s = e.range.getSheet(); var r = e.range; var actionCo
function onEdit(e) {
var ss = e.source;
var s = e.range.getSheet();
var r = e.range;
var actionCol = 10;
var nameCol = 9;
var rowIndex = r.rowStart;
var colIndex = r.columnStart;
var colNumber = s.getLastColumn()-1;
const dt=new Date(e.range.offset(0,n));//you add the column offset
const dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
const td=new Date();
const tdv=new Date(td.getFullYear(),td.getMonth(),td.getDate()).valueOf();
if (e.value == "ok" && colIndex == actionCol && dtv==tdv) {
var targetSheet = s.getRange(rowIndex, nameCol).getValue();
var tSh = ss.getSheetByName(targetSheet);
if (tSh) {
var targetRange = tSh.getRange(tSh.getLastRow()+1, 1, 1, colNumber);
var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
sourceRange.copyTo(targetRange);
s.deleteRow(rowIndex);
}
}
}
如果我理解正确,您希望在以下情况下剪切并粘贴已编辑的行:
G
,其值是与今天相对应的日期F
中的对应名称指的是现有图纸的名称function onEdit(e) {
var ss = e.source;
var s = e.range.getSheet();
var r = e.range;
var value = r.getValue();
var actionCol = 7;
var nameCol = 6;
var rowIndex = r.getRow();
var colIndex = r.getColumn();
var colNumber = s.getLastColumn();
if (value instanceof Date && colIndex == actionCol) {
var today = new Date();
if (sameDay(value, today)) {
var targetSheetName = s.getRange(rowIndex, nameCol).getValue();
var targetSheet = ss.getSheetByName(targetSheetName);
if (targetSheet) {
var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
sourceRange.copyTo(targetRange);
s.deleteRow(rowIndex);
}
}
}
}
但是偶然发现了一个问题。
你能说得更具体些吗?你有什么错误吗?实际结果与您预期的结果有何不同?您能否提供一份您正在处理的电子表格的副本,表明这一差异?现在,该功能的工作方式是,如果在“F”列中选择了选项卡,并且“G”列更改为“ok”,则该行将被传输。我想更改,以便在“G”列中的“ok”位置显示日期,如果是今天的日期,则进行复制。从逻辑上讲,我理解一切,但在这里,我必须自己写一些疯狂的问题。未给出:D非常提前感谢。@UnrealHA脚本已经在检查它是否是今天的日期,即使ok
没有更改为日期。您的意思是希望将C
中的日期复制到G
,然后将日期与今天的日期进行比较,如果匹配,则将行移动到目标工作表?而不是“确定”写入日期,然后检查今天的日期是否正确,然后复制。@UnrealHA因此,如果今天的日期写入G
,则要复制数据,忽略C
。为了做到这一点,我编辑了我的答案,包括代码片段。让我知道这是否对你有效。我知道我的问题在哪里。非常感谢你。一切都很好。
function sameDay(d1, d2) {
return d1.getFullYear() === d2.getFullYear() &&
d1.getMonth() === d2.getMonth() &&
d1.getDate() === d2.getDate();
}
function onEdit(e) {
var ss = e.source;
var s = e.range.getSheet();
var r = e.range;
var value = r.getValue();
var actionCol = 7;
var nameCol = 6;
var rowIndex = r.getRow();
var colIndex = r.getColumn();
var colNumber = s.getLastColumn();
if (value instanceof Date && colIndex == actionCol) {
var today = new Date();
if (sameDay(value, today)) {
var targetSheetName = s.getRange(rowIndex, nameCol).getValue();
var targetSheet = ss.getSheetByName(targetSheetName);
if (targetSheet) {
var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
sourceRange.copyTo(targetRange);
s.deleteRow(rowIndex);
}
}
}
}