javascript - 按列名称在单元格中插入值

标签 javascript google-apps-script google-sheets

我有一个 Google 电子表格与其他人共享。我的工作表名称是“OrderList”。我编写了以下代码,我想在此代码中使用列名称而不是使用列号。第一行在此表中被卡住。

var COLUMNTOCHECK1 = 5;
var COLUMNTOCHECK2 = 6;

var DATETIMELOCATION1 = [0, 2];
var DATETIMELOCATION2 = [0, 3];

var SHEETNAME = 'OrderList'

function onEdit(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    if (sheet.getSheetName() == SHEETNAME) {
        var selectedCell = ss.getActiveCell();
        if (selectedCell.getColumn() == COLUMNTOCHECK1) {
            var email = Session.getActiveUser().getEmail();
            var dateTimeCell = selectedCell.offset(DATETIMELOCATION1[0], 
DATETIMELOCATION1[1]);
            dateTimeCell.setValue(new Date());
            var dateTimeCell1 = selectedCell.offset(DATETIMELOCATION2[0], 
DATETIMELOCATION2[1]);
            dateTimeCell1.setValue(email);
        }
        if (selectedCell.getColumn() == COLUMNTOCHECK2) {
            var dateTimeCell = selectedCell.offset(DATETIMELOCATION2[0], 
DATETIMELOCATION2[1]);
            dateTimeCell.setValue(new Date());
        }
    }
}

最佳答案

您可以使用 sheet.getRange(rangeOfHeaderCell).getValue()==='desired column header') 获取该列标题单元格的值,并将该值与您要查找的值进行比较。就像这样:

if (sheet.getRange(1, selectedCell.getColumn(), 1, 1).getValue() == 'Hello World') {
    var dateTimeCell = selectedCell.offset(DATETIMELOCATION2[0], DATETIMELOCATION2[1]);
    dateTimeCell.setValue(new Date());
}

您也可以轻松地将其变成一个函数:

function getColumnHeading(sheet,columnIndex){
  return sheet.getRange(1,columnIndex,1,1).getValue();
}

要通过标题名称而不是偏移量获取列,这有点复杂,但我想出了一个简单的函数来迭代可用的列。以下是将所有内容放在一起并进行了一些重构:

var SHEETNAME = 'OrderList';
var EMAIL_COLUMN_NAME = 'Email Stamp';
var TIMESTAMP_COLUMN_NAME = 'Time Stamp';

function onEdit(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    if (sheet.getSheetName() == SHEETNAME) {
        // Lookup columns
        var emailColumn = getColumnByHeader(EMAIL_COLUMN_NAME, sheet);
        var timestampColumn = getColumnByHeader(TIMESTAMP_COLUMN_NAME, sheet);
        // Get active cell details
        var selectedCell = ss.getActiveCell();
        var selectedColumnName = getColumnHeading(sheet,selectedCell.getColumn());
        // Set values in corresponding columns
        if (selectedColumnName == 'My Special Column') {
            var email = Session.getActiveUser().getEmail();
            if (timestampColumn) {
                sheet.getRange(selectedCell.getRow(), timestampColumn, 1, 1).setValue(new Date());
            }
            if (emailColumn){
                sheet.getRange(selectedCell.getRow(),emailColumn,1,1).setValue(email);
            }
        }
        else if (selectedColumnName == 'Hello World') {
            if (timestampColumn) {
                sheet.getRange(selectedCell.getRow(), timestampColumn, 1, 1).setValue(new Date());
            }
        }
    }
}

function getColumnByHeader(headerName, sheet, rowIndex) {
    rowIndex = typeof (rowIndex) !== 'undefined' ? rowIndex : 1;
    // Get full range of header row
    var headerRange = sheet.getRange(rowIndex, 1, 1, sheet.getDataRange().getLastColumn());
    var headerValues = headerRange.getValues()[0];
    for (var x = 0; x < headerValues.length; x++) {
        if (headerValues[x] == headerName) {
            return x + 1;
        }
    }
    return false;
}

function getColumnHeading(sheet, columnIndex) {
    return sheet.getRange(1, columnIndex, 1, 1).getValue();
}

关于javascript - 按列名称在单元格中插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56302121/

相关文章:

javascript - Selenium 的 JavascriptExecutor 在 JMeter 的 JSR223 采样器中不起作用

javascript - jQuery 可放置和可拖动元素看不到对方

javascript - 如何使用 Google Sheets Macros 从一张工作表复制值并将它们粘贴到另一张工作表中?

google-sheets - 禁用 Google 电子表格的自动计算

Java、Google 表格 API : AuthSub token has wrong scope

javascript - 仅为新客户端更新 ServiceWorker

javascript - jQuery ajax 成功链接 Internet Explorer 问题

javascript - 如何在 Google Apps 脚本中忽略自动回复指定的电子邮件

database - 是否可以使用 Google 脚本创建公共(public)数据库(电子表格)搜索?

javascript - 无法设置行中单元格的值,因为它已转换为没有方法的对象或数组