相同的代码在函数内部和外部表现不同

问题描述 投票:0回答:1

我有一张谷歌表格,其中一列包含汽车名称。我的目标是编写一个脚本,当您单击自定义菜单中的按钮时,该脚本将访问 API 并提取这些汽车的价格,并将它们放入另一列中。现在我正在努力运行一个基本函数来在我的工作表中找到正确的列。

我有一个代码块可以按预期工作,但是当我将其放入函数中时它会失败。

function fetchPrices(sheetName) {
  let sheet;
  sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  let data = sheet.getDataRange().getValues();
  let col = data[0].indexOf('Model');
}

const sheetName = 'Cars'
let sheet;
sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
let data = sheet.getDataRange().getValues();
let col = data[0].indexOf('Model');

Logger.log(col);
Logger.log(fetchPrices('Cars'))

据我所知,这些是完全相同的四行代码,用于查找名为“Model”的列的索引,但是当我运行它时,我得到了

Info 0.0(预期答案)
信息为空
类型错误:无法读取 null 的属性(读取“getDataRange”)

这是怎么回事,为什么函数中的代码运行不正常?

更新

这里是演示表的链接,该演示表表现出与我的实际数据相同的行为。

javascript google-apps-script
1个回答
0
投票

indexOf() 方法返回在数组中可以找到给定元素的第一个索引,如果不存在则返回 -1。因此,它工作正常,因为模型是数组中的第一个元素,并且数组是从零开始的。

=fetchPrices("Cars")

如预期返回0

function fetchPrices(sheetName) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();
  var colnum = data[0].indexOf('Model');
  return colnum;
}
© www.soinside.com 2019 - 2024. All rights reserved.