如标题所述,我试图使用下面的代码设置一个自动化,该代码基于过去的行特定单元格值(日期)移动整个行。包含该日期的列为";L"如果这有帮助,我不确定在必要时在哪里使用它,这是在getDataRange
函数内吗?我使用的日期信息是当前格式:1/25/2021 19:30:00
当我运行下面的代码时,它给我"执行完成"通知,但它似乎没有将行移动到目标表(Auction Results
)。
为了提供进一步的上下文,原始工作表称为Collecting Cars - Live
,今天的日期保存在B1的工作表App Rules
中。
function MovetoPastShows2() {
function MovetoPastShows2() {
var ss = SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Auctions - Live');
var rg=sh.getDataRange();
var vA=rg.getValues();
var today=new Date(ss.getSheetByName('App Rules').getRange('B1').getValue()).valueOf();
var dsh=ss.getSheetByName('Auction Results');
var d=0;
for(var i=0;i<vA.length;i++) {
if (new Date(vA[i][2]).valueOf()<=today) {
dsh.appendRow(vA[i])
sh.deleteRow(i+1-d);
d++;
}
}
}
Issue:
你有一个MovetoPastShows2
函数在另一个MovetoPastShows2
函数里面。
-
内的
MovetoPastShows2()
永远不会执行,因此该函数中的代码永远不会 -
只执行外层
MovetoPastShows2()
,它唯一的工作是定义另一个同名的函数。但是,它并不执行内部函数中的实际代码。 -
有两个同名的函数不是一个好主意。虽然这不是这里的问题,但这是一个一般的建议。
解决方案:
移除外部MovetoPastShows2()
:
function MovetoPastShows2() {
var ss = SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Auctions - Live');
var rg=sh.getDataRange();
var vA=rg.getValues();
var today=new Date(ss.getSheetByName('App Rules').getRange('B1').getValue()).valueOf();
var dsh=ss.getSheetByName('Auction Results');
var d=0;
for(var i=0;i<vA.length;i++) {
if (new Date(vA[i][2]).valueOf()<=today) {
dsh.appendRow(vA[i])
sh.deleteRow(i+1-d);
d++;
}
}
}