【问题标题】: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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-26
          • 2015-11-07
          • 2013-08-04
          • 2016-07-04
          • 1970-01-01
          相关资源
          最近更新 更多