Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按列插入单元格中的值';姓名_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 按列插入单元格中的值';姓名

Javascript 按列插入单元格中的值';姓名,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个谷歌电子表格与其他人共享。我的工作表名是“订单列表”。我已经编写了以下代码,我想在这段代码中使用列名而不是列号。此表中的第一行已冻结 var COLUMNTOCHECK1 = 5; var COLUMNTOCHECK2 = 6; var DATETIMELOCATION1 = [0, 2]; var DATETIMELOCATION2 = [0, 3]; var SHEETNAME = 'OrderList' function onEdit(e) { var ss = Sp

我有一个谷歌电子表格与其他人共享。我的工作表名是“订单列表”。我已经编写了以下代码,我想在这段代码中使用列名而不是列号。此表中的第一行已冻结

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()==='DesiredColumnHeading')
获取该列标题单元格的值,并将该值与您要查找的值进行比较。像这样:

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();
}
var SHEETNAME='OrderList';
var EMAIL_COLUMN_NAME='电子邮件戳';
var TIMESTAMP_COLUMN_NAME='Time Stamp';
功能OneEdit(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
如果(sheet.getSheetName()==SHEETNAME){
//查找列
var emailColumn=getColumnByHeader(电子邮件列名称,表格);
var timestampColumn=getColumnByHeader(时间戳\列\名称,表);
//获取活动单元格的详细信息
var selectedCell=ss.getActiveCell();
var selectedColumnName=getColumnHeading(工作表,selectedCell.getColumn());
//在相应列中设置值
如果(selectedColumnName=='My Special Column'){
var email=Session.getActiveUser().getEmail();
if(时间戳列){
sheet.getRange(selectedCell.getRow(),timestampColumn,1,1).setValue(newdate());
}
如果(电子邮件栏){
sheet.getRange(selectedCell.getRow(),emailColumn,1,1).setValue(email);
}
}
else if(selectedColumnName=='Hello World'){
if(时间戳列){
sheet.getRange(selectedCell.getRow(),timestampColumn,1,1).setValue(newdate());
}
}
}
}
函数getColumnByHeader(标题名称、工作表、行索引){
rowIndex=typeof(rowIndex)!='undefined'?rowIndex:1;
//获取标题行的完整范围
var headerRange=sheet.getRange(rowIndex,1,1,sheet.getDataRange().getLastColumn());
var headerValues=headerrage.getValues()[0];
对于(变量x=0;x
我想使用列名而不是“offset”类?啊,我不知道你也想这么做。我已经用一个完整的脚本更新了我的答案。你能解释一下“getColumnByHeader”函数吗?它允许你通过它的标题(第一行的第一个单元格)中应该包含的内容来查找一列(及其对应的索引整数)。Google Sheets中没有内置的函数来实现这一点,所以我将其作为一种快速解决方法来编写。如果找不到它,它将返回false,这允许您检查找到的列并避免尝试写入不存在的列。为什么在我运行时,它会发送消息“TypeError:Cannot call method”getRange“of undefined.”?