我正在为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”的方法?
有点令人沮丧,对此有任何见解将不胜感激。
答案 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);
}
}
}