按标题名称检索Google表格列

时间:2019-04-15 15:11:04

标签: javascript arrays multidimensional-array google-apps-script google-sheets

是否可以通过列名(标题)动态检索列?

代替:

var values = sheet.getRange("A:A").getValues();

类似的东西(为简单起见)

var values = sheet.getRange(sheet.column.getHeader("name").getValues();

请记住,Google Apps脚本大致为ES3。

3 个答案:

答案 0 :(得分:0)

虽然没有直接的方法,但是有很多方法可以通过一些简单的设置来获得所需的内容:

  • 获取所有数据并对其进行过滤(未设置):
var values = sheet.getDataRange().getValues();
var headers = values.splice(0,1);
headerIdx = headers[0].indexOf("name");
values = values.map(function(row){return [row[headerIdx]];})
  • 已设置命名范围:

如果您已命名与该列关联的范围,

spreadsheet.getRangeByName('Sheet Name!name').getValues();//where 'name' is a named range
  • 开发人员元数据设置:

如果您有与该列关联的开发人员元数据,

SpreadsheetApp.getActive()
    .createDeveloperMetadataFinder()
    .withKey(/*METADATA_KEY_ASSOCIATED_WITH_COLUMN*/)
    .find()[0]
    .getLocation()
    .getColumn()
    .getValues();

答案 1 :(得分:0)

您可以写一个;)

function getColValuesByName(sheet, name) {
  var index = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0].indexOf(name);
  index++;
  return sheet.getRange(1,index,sheet.getLastRow(),1).getValues();
}

答案 2 :(得分:0)

这是一个非常简单的单行函数,您可以复制。例如,它返回用于 getRange 的列号(A = 1、B = 2 等)。

function getColByHeader(name) {
  return SpreadsheetApp.getActiveSheet().getRange('1:1').getValues()[0].indexOf(name) + 1;
}