我正在为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);
}
}
}