【问题标题】:Retrieve Google Sheets column by header name按标题名称检索 Google 表格列
【发布时间】:2019-09-05 14:44:29
【问题描述】:
有没有办法通过列名(标题)动态检索列?
代替:
var values = sheet.getRange("A:A").getValues();
类似:(只是为了简单起见)
var values = sheet.getRange(sheet.column.getHeader("name").getValues();
请记住,Google Apps 脚本大致是 ES3。
【问题讨论】:
标签:
javascript
arrays
multidimensional-array
google-apps-script
google-sheets
【解决方案1】:
虽然没有直接的方法,但有很多方法可以通过一些设置得到你想要的:
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();
【解决方案2】:
你可以写一个;)
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();
}
【解决方案3】:
这是一个您可以复制的非常简单的单行函数。例如,它返回列号(A = 1、B = 2 等)以供在getRange 中使用。
function getColByHeader(name) {
return SpreadsheetApp.getActiveSheet().getRange('1:1').getValues()[0].indexOf(name) + 1;
}