我是Google Apps脚本的新手。我想通过它的列名来获取特定单元格的值,而不是列索引。这就是我所拥有的:
var rows = sheet.getDataRange();
var values = rows.getValues();
var row =values[1];
var rowStaffName = row[0];
我想使用列名,而不是使用row[0]
。有没有一种简单的方法可以做到这一点?
答案 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)
以其他答案为基础,为您提供全面的功能集合。
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);
}
}
function getCellValueByColumnName(sheet, columnName, row) {
let cell = getCellRangeByColumnName(sheet, columnName, row);
if (cell != null) {
return cell.getValue();
}
}
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());
}
}
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();
}
}