按列名而不是列索引获取列值

Kel*_*ddy 17 google-sheets google-apps-script

我是Google Apps脚本的新手.我想通过它的列名来获取特定单元格的值,而不是列索引.这是我有的:

var rows = sheet.getDataRange();
var values = rows.getValues();
var row =values[1];
var rowStaffName = row[0];
Run Code Online (Sandbox Code Playgroud)

而不是使用row[0],我想使用列名称.有一个简单的方法吗?

小智 25

以下函数在给定行中重试具有给定名称的列中的值.

function getByName(colName, row) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var col = data[0].indexOf(colName);
  if (col != -1) {
    return data[row-1][col];
  }
}
Run Code Online (Sandbox Code Playgroud)

具体来说,var col = data[0].indexOf(colName);在工作表的顶行中查找给定名称.如果找到,则返回该列的给定行中的值(row-1用于说明基于0的JavaScript索引).

要测试这是否有效,请尝试类似的方法

function test() {
  Logger.log(getByName('Price', 4)); // Or whatever name or row you want
} 
Run Code Online (Sandbox Code Playgroud)


Kra*_*nov 9

可能还需要一个函数来返回给定名称的整个列,而不仅仅是单个单元格。另一个答案的这种变体为此目的效果很好:

function getByName(colName, sheetName) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var data = sheet.getRange("A1:1").getValues();
  var col = data[0].indexOf(colName);
  if (col != -1) {
    return sheet.getRange(2,col+1,sheet.getMaxRows()).getValues();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我将sheet.getMaxRows()修改为sheet.getLastRow()-1,然后我得到了没有标题的预期列值 (2认同)

Pau*_*erg 6

建立在其他答案之上,为您提供全面的功能集合。

按列名称获取单元格范围

function getCellRangeByColumnName(sheet, columnName, row) {
  let data = sheet.getDataRange().getValues();
  let column = data[0].indexOf(columnName);
  if (column != -1) {
    return sheet.getRange(row, column + 1, 1, 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

按列名称获取单元格值

function getCellValueByColumnName(sheet, columnName, row) {
  let cell = getCellRangeByColumnName(sheet, columnName, row);
  if (cell != null) {
    return cell.getValue();
  }
}
Run Code Online (Sandbox Code Playgroud)

按名称获取列范围

function getColumnRangeByName(sheet, columnName) {
  let data = sheet.getRange("A1:1").getValues();
  let column = data[0].indexOf(columnName);
  if (column != -1) {
    return sheet.getRange(2, column + 1, sheet.getMaxRows());
  }
}
Run Code Online (Sandbox Code Playgroud)

按名称获取列值

function getColumnValuesByName(sheet, columnName) {
  let column = getColumnRangeByName(sheet, columnName);
  if (column != null) {
    return column.getValues();
  }
}
Run Code Online (Sandbox Code Playgroud)