GAS电子表格通过标记为“;SENT”;,不起作用

GAS Spreadsheet avoid getting duplicates by marking as "SENT", not working?

本文关键字:SENT 不起作用 记为 电子表格 GAS      更新时间:2023-09-26

我在谷歌电子表格中有这个脚本,它可以很好地获取所有标记为"READY"的行,然后它将列"W"(23)中的值设置为"SENT",然后我试图通过将列标记为"SENT"来避免获取重复,但当我再次运行代码时,它会忽略它刚刚粘贴的"SENT?这里怎么了?

var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var stitchSheet = ss.getSheetByName("Sheet8");
var orderSheet = ss.getSheetByName("Sheet1");
var SENT = "SENT";
function getOrders() {
    var range  = orderSheet.getDataRange();
    var orders  = range.getValues();  
    for (var i = 1; i < orders.length; i++) {
        var row = orders[i];
        var status = row[1];
        var order = row[4]; 
        var name = row[5]; 
        var system = row[22]; 
        if(system != SENT){ 
            if(status.toString() === 'READY'){
                orderSheet.getRange(i,23).setValue(SENT);
                stitchSheet.appendRow([order,name]); 
            }
        }
    }
}

您的代码很好,所以某个地方一定有逻辑错误。我注意到您在for循环1中创建了var i。我不知道这是有意还是无意,但在大多数编程语言中,数组的索引几乎总是以0开头,这意味着你将从工作表的第2行开始,而不是第1行。

查找逻辑错误

要查找逻辑错误,您需要学习如何在脚本编辑器中使用调试器控制台。

在我下面用星号标记的行上放置断点:

var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var stitchSheet = ss.getSheetByName("Sheet8");
var orderSheet = ss.getSheetByName("Sheet1");
var SENT = "SENT";
function getOrders() {
    var range  = orderSheet.getDataRange();
*   var orders  = range.getValues();  
    for (var i = 1; i < orders.length; i++) {
*       var row = orders[i];
        var status = row[1];
        var order = row[4]; 
        var name = row[5]; 
*       var system = row[22]; 
        if(system != SENT){ 
            if(status.toString() === 'READY'){
                orderSheet.getRange(i,23).setValue(SENT);
                stitchSheet.appendRow([order,name]); 
            }
        }
    }
}

启动调试器,它将在第一个断点处停止。检查range的值。展开This应该可以找到orderSheetSENT(因为它们在函数之外,应该在作用域中)。如果没有,你就有问题了。

转到下一个断点并检查orders,它现在应该有一个数组数组。您可以检查是否获得了正确的值,如果没有,则跳到下一个断点并查看row是什么。