getValues()返回undefined

时间:2017-01-06 09:32:40

标签: google-apps-script

我试图将一些数据从一张纸复制并传递到另一张纸。我有以下数据结构 - >

我要复制的内容(sheet1):

dataname  value
data1     value1
data2     value2
data3     value3
data4     value4

最终结果(sheet2):

day1 value1 value2 value3 value4
day2 value1 value2 value3 value4
day3 value1 value2 value3 value4

正如您可能理解的那样,sheet1上的数据每天都会在sheet2上刷新并复制。

以下是我使用的脚本:

function getdata() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");;
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet2")
  var data = ss.getRange('B1:B10').getValues()[0][0];
  sheet.appendRow([data[1],data[1],data[2],data[3],data[4],data[5],data[6]]);
}

我知道这是一个非常基本的问题,但我仍然不明白getValues()是如何运作的。使用上面的脚本我得到以下结果:

undefined undefined undefined undefined undefined undefined undefined

为什么?我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:3)

此处,在数据变量中,仅存储范围B1:B10的第一个值。您可以使用

查看其值
Logger.log(data);

然后去查看 - >记录或在执行代码后按ctrl + enter。

现在,如果要以二维数组格式存储工作表值,则应使用:

var data = ss.getDataRange().getValues();  //Here, ss is what you have declared earlier

现在您可以使用记录器检查数据值。

或者,如果您只想在数组中使用B1:B10值,请按以下方式编写:

var data = ss.getRange("B1:B10").getValues();

现在你可以使用

Logger.log(data);
Logger.log(data[3]);

你会得到你想要的东西。

答案 1 :(得分:3)

getValues()返回Object[][],这是一组值数组 当您运行var data = ss.getRange('B1:B10').getValues()[0][0];时,您将获取最左侧的值并将其保存在数据中。

我不知道那个单元格中有什么,但我认为它是一个空字符串,因为你从偏移量1开始对其进行子集化,它返回undefined而不是抛出异常。

你(可能)想要做的是这样的事情:

var data = ss.getRange('B1:B10').getValues();
sheet.appendRow([data[1][1],data[2][1],data[3][1],data[4][1],data[5][1],data[6][1]]);

sheet1获取第2-7行的第二列并对其进行转置并将其附加到sheet2。