Javascript错误,并不知道它是什么意思

时间:2012-08-11 09:20:30

标签: javascript google-sheets google-spreadsheet-api

我正在为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”的方法?

有点令人沮丧,对此有任何见解将不胜感激。

1 个答案:

答案 0 :(得分:3)

很明显,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)

之类的内容

EDITED:作为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);

        }
    }
}