任何人都可以帮助解决谷歌电子表格中的一个问题吗?
在工作表“Venues”中的一个具体列中更改值后,我想写一个关于名称和时间的日志,当这个值被更改时。但我无法真正意识到,如果我正在使用电子表格“场地”或其他一些。我不太熟悉电子表格的谷歌API的类结构。那么任何人都可以帮忙吗?
我需要:
我很难写出一些东西:(但那是非常糟糕的代码)
function onEdit(event)
{
var sheet = event.source.getActiveSheet();
var cell = sheet.getActiveCell();
var cellR = cell.getRow();
var cellC = cell.getColumn();
var cellValue = cell.getValue();
var cellCName = cell.getColumn()-1; //column with names
var name = sheet.getRange(cellR, cellCName).getValue();//get name
var active_spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
if(sheet.getName() == "Venues"){
if(cellC == 5 /* if correct collumn was changed */){
var output_sheet = active_spreadsheet.getSheetByName("status_history");
var lastRow = output_sheet.getLastRow();
var lastRange = output_sheet.getRange(lastRow, 1)
//HERE: write value: name
var lastRow = output_sheet.getLastRow();
var lastRange = output_sheet.getRange(lastRow, 2)
//HERE: write value: time
}
}
}
答案 0 :(得分:1)
你到了那里。只需要几个调整。
使用onEdit函数,您需要保持快速,因为它们经常被调用。
if
语句,该语句告诉您是否在某个单元格中要记录之前致电SpreadsheetApp.getActiveSpreadsheet()
。appendRow()
如何替换多个语句。 这是代码检查后的功能:
function onEdit(event) {
var sheet = event.range.getSheet();
if(sheet.getName() == "Venues"){
// correct sheet
var cell = event.range;
//var cellR = cell.getRow(); // not used at this time
var cellC = cell.getColumn();
var cellValue = event.value;
if (cellC == 5) {
// correct column
var name = cell.offset(0,-1).getValue(); // get name, 1 column to left
var time = new Date(); // timestamp
var active_spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var output_sheet = active_spreadsheet.getSheetByName("status_history");
output_sheet.appendRow([name,time]);
}
}
}
通过使用列名来测试条件,可以使其更加灵活和便携。看看Adam's answer here。