我正在为Google Spreadsheets创建一个小脚本,该脚本会将数字移到一列中,将字符串移到另一列中。应该很基本,但是我几乎不玩JS,自然我遇到了一些对我来说毫无意义的东西。

这是代码。

function moveData() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataToMove = sheet.getRange("A1:A5003");
    var lastRow = sheet.getLastRow();


    for (var i = 0; i <= lastRow - 1; i++)
    {
        var unparsedValue = dataToMove[i];
        if(unparsedValue != "" && typeof unparsedValue === "number" && !isNaN(unparsedValue))
        {
            var parsedValue = unparsedValue;
            Logger.log(parsedValue);

        }
    }
}


这显然还没有完成,但是在var unparsedValue = dataToMove[i];处引发了错误

错误如下:类“ $ Proxy810”没有公共实例字段或名为“ 0”的方法

什么是$ Proxy810,如果我正确理解为什么它会有一个字段或名为“ 0”的方法?

很少有挫败感,对此有任何见识将不胜感激。

最佳答案

很明显,sheet.getRange("A1:A5003")返回$Proxy810实例,并且循环中的第一个值是0

dataToMove[i];
// is the same as
dataToMove[0];
// is the same as
dataToMove.0


$Proxy810没有这样的属性。

我想您不需要循环使用方括号,而是使用某种方法,尽管我对Spreadsheets API并不熟悉,但是您需要查找类似dataToMove.getRow(i)的东西

编辑:作为google show上的第一个脚本示例,您需要使用以下代码:

function readRows() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var rows = sheet.getDataRange();
   var numRows = rows.getNumRows();
   var values = rows.getValues();

   for (var i = 0; i <= numRows - 1; i++) {
       var row = values[i];
       Logger.log(row);
   }
};


因此,在您的情况下,您需要按以下方式更改代码:

function moveData() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataToMove = sheet.getRange("A1:A5003");
    var numRows = dataToMove.getNumRows();
    var values = dataToMove.getValues();

    for (var i = 0; i <= numRows - 1; i++)
    {
        var unparsedValue = values[i];
        if(unparsedValue != "" && typeof unparsedValue === "number" && !isNaN(unparsedValue))
        {
            var parsedValue = unparsedValue;
            Logger.log(parsedValue);

        }
    }
}

08-07 10:59