为什么 getCell() 返回 "Range" 而不是值?
Why is getCell() returning "Range" instead of the values?
我正在开发一个非常简单的脚本,它将值记录在一列中,我之前在 Google Apps 脚本中使用了类似的结构并取得了巨大成功,但我看不到问题所在这里。 "statusColumn" 填充了不同的值,当我尝试像这样记录它们时,所有行都是 returns "Range"。关于为什么会这样有什么建议吗?
var statusColumn = 1;
function getOrders() {
var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var sheet = ss.getSheetByName("Sheet8");
var orders = sheet.getDataRange();
var numRows = orders.getNumRows();
for (var i = 1; i <= numRows; i++) {
var status = orders.getCell(i, statusColumn);
Logger.log([status]);
}
}
编辑:
var statusColumn = 1;
function getOrders() {
var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var sheet = ss.getSheetByName("Sheet8");
var orders = sheet.getDataRange();
var numRows = orders.getNumRows();
for (var i = 1; i <= numRows; i++) {
var statusCell = orders.getCell(i, statusColumn).getValue();
Logger.log(statusCell)
}
}
getCell()
returns 一个Range对象,在这种情况下range表示单个单元格,但Range对象也可能表示一组单元格。您正在寻找单元格的值,可以使用 getValue() 从范围中检索该值。
Logger.log(status.getValue());
见:
https://developers.google.com/apps-script/reference/spreadsheet/range
https://developers.google.com/apps-script/reference/spreadsheet/range#getValue()
顺便说一句,您使用的方法(一次获取一个单元格)效率很低。相反,您应该使用 getRange() 获取整个列,然后使用 getValues() 获取所有值。 GetValues() 将 return 一个包含您所有状态值的数组。
这些函数都记录在上面的链接中。
您正在使用的功能完全符合其名称;获取 range.
要获取范围值,您需要使用 .getValues()
。
示例代码:
sheet.getRange('A1:A3').getValues();
.getRange()
和 .getDataRange()
之间的唯一区别是前者将 select 仅在您指定的范围内,如果您想将范围限制在特定范围内,这很好你的 sheet,而后面的 vill 会自动找到 sheet 和 return 中的所有值。
任何空单元格都将看起来像 [notemptycell, , ,]
,如果该行有 3 个空单元格,那么这就是一个数组。
记住;你 return 告诉你的对象是一个数组数组,因此你需要 for 循环两次这样的模式:
for (var i = 0; i < values.length; i++) {
// Loops through the rows
for (var j = 0; j < values[i].length; j++) {
// Loops through the columns of a row
}
}
我正在开发一个非常简单的脚本,它将值记录在一列中,我之前在 Google Apps 脚本中使用了类似的结构并取得了巨大成功,但我看不到问题所在这里。 "statusColumn" 填充了不同的值,当我尝试像这样记录它们时,所有行都是 returns "Range"。关于为什么会这样有什么建议吗?
var statusColumn = 1;
function getOrders() {
var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var sheet = ss.getSheetByName("Sheet8");
var orders = sheet.getDataRange();
var numRows = orders.getNumRows();
for (var i = 1; i <= numRows; i++) {
var status = orders.getCell(i, statusColumn);
Logger.log([status]);
}
}
编辑:
var statusColumn = 1;
function getOrders() {
var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
var sheet = ss.getSheetByName("Sheet8");
var orders = sheet.getDataRange();
var numRows = orders.getNumRows();
for (var i = 1; i <= numRows; i++) {
var statusCell = orders.getCell(i, statusColumn).getValue();
Logger.log(statusCell)
}
}
getCell()
returns 一个Range对象,在这种情况下range表示单个单元格,但Range对象也可能表示一组单元格。您正在寻找单元格的值,可以使用 getValue() 从范围中检索该值。
Logger.log(status.getValue());
见: https://developers.google.com/apps-script/reference/spreadsheet/range https://developers.google.com/apps-script/reference/spreadsheet/range#getValue()
顺便说一句,您使用的方法(一次获取一个单元格)效率很低。相反,您应该使用 getRange() 获取整个列,然后使用 getValues() 获取所有值。 GetValues() 将 return 一个包含您所有状态值的数组。
这些函数都记录在上面的链接中。
您正在使用的功能完全符合其名称;获取 range.
要获取范围值,您需要使用 .getValues()
。
示例代码:
sheet.getRange('A1:A3').getValues();
.getRange()
和 .getDataRange()
之间的唯一区别是前者将 select 仅在您指定的范围内,如果您想将范围限制在特定范围内,这很好你的 sheet,而后面的 vill 会自动找到 sheet 和 return 中的所有值。
任何空单元格都将看起来像 [notemptycell, , ,]
,如果该行有 3 个空单元格,那么这就是一个数组。
记住;你 return 告诉你的对象是一个数组数组,因此你需要 for 循环两次这样的模式:
for (var i = 0; i < values.length; i++) {
// Loops through the rows
for (var j = 0; j < values[i].length; j++) {
// Loops through the columns of a row
}
}