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

时间:2016-04-01 02:14:52

标签: google-apps-script google-sheets

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

var rows = sheet.getDataRange();
var values = rows.getValues();
var row =values[1];
var rowStaffName = row[0];

我想使用列名,而不是使用row[0]。有没有一种简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:23)

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

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];
  }
}

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

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

的内容
function test() {
  Logger.log(getByName('Price', 4)); // Or whatever name or row you want
} 

答案 1 :(得分:2)

以其他答案为基础,为您提供全面的功能集合。

getCellRangeByColumnName

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

getCellValueByColumnName

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

getColumnRangeByName

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());
  }
}

getColumnValuesByName

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

答案 2 :(得分:0)

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

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();
  }
}
相关问题