Google脚本简单搜索

时间:2018-10-18 21:04:46

标签: javascript excel-vba google-apps-script google-sheets

我想在工作表中搜索工作表中的值,然后返回找到该值的行和列。

我精通VBA,并且使用.Find函数可以很容易地完成此任务。但是,在网上搜索了最后30分钟后,我惊讶地发现,很难找到用于此极其简单功能的代码。我感觉就像在暮光之城。 JavaScript是否真的没有类似于.Find的东西?如果是这样,为什么当VBA似乎能够以一种更简单的方式完成相同的任务时,为什么使用这种语言呢?请告知。

2 个答案:

答案 0 :(得分:0)

您正在比较苹果和橘子。 JavaScript和VBA是具有不同目标的不同语言。建立VBA是为了使其能够与MSSQLServer无缝集成。本机形式的JavaScript完全没有关系数据库功能。这意味着更多通过DOM来操纵网页。 (它可以做的还不止这些,但这是它的主要功能。)尽管VBA可以完成Javascript可以完成的某些工作,但这是一种笨拙的方式(IMHO),它只专注于一系列相当具体的问题,即与非常特定的软件和硬件基础结构绑定在一起。尽管在某些情况下可以很好地使用该功能,但是您今天在网络上看到的大多数JavaScript完全对数据库不感兴趣。

我不清楚您要连接的数据源,但是如果您专门寻找JavaScript数据解决方案,则可能需要研究类似MongoDB之类的代码库,为此专门开发的。还有大量其他的JS libraries是关系数据或数据库特定的,您可以搜索诸如npm之类的地方。或者,您可以将JavaScript与固有包含数据库功能的语言结合使用,PHP是一个很好的例子。

答案 1 :(得分:0)

我假设您正在调用类似mysheet.getDataRange().getValues()之类的方法,它以数组数组的形式返回Google工作表的内容,例如[[row1A, row1B], [row2A, row2B]]

使用JS,您可以使用indexOf获取数组中值的索引,该值将返回找到的项的索引;如果该项不在数组中,则返回-1。我认为您无法直接搜索两个嵌套数组。相反,您可以尝试遍历外部数组并搜索内部数组。像这样:

// get data from google sheet, doing something like this
var data = mysheet.getDataRange().getValues()

// define our own function
function findItem(data) {
  // loop over outer array
  for (var i=0; i < data.length; i++) {
    var row = data[i];                   // get the inner array
    var idx = row.indexOf(searchValue);  // search for value
    // if the value is found, return [row, column] 
    if (idx > -1) {
      return [i, idx];
    }
  }

// call the function
var res = findItem(data);
var row = res[0];
var col = res[1];