1

我正在为 Google 电子表格创建一个小脚本,它将数字移入一列,将字符串移入另一列。应该是非常基本的,但我只是几乎不玩 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”的字段或方法?

一点令人沮丧和对此的任何见解将不胜感激。

4

1 回答 1

3

很明显,sheet.getRange("A1:A5003")返回$Proxy810实例和循环中的第一个值是0您在这一行的代码

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

并且$Proxy810没有这样的财产。

我想你不需要使用括号循环,而是使用一些方法,虽然我不熟悉电子表格 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);

        }
    }
}
于 2012-08-11T09:31:24.323 回答