请问有人可以帮忙解决 Google 电子表格中的一个问题吗?
更改“ field ”表中一个具体列中的值后,我想在更改该值时写入有关名称和时间的日志。但我无法真正意识到,如果我正在使用电子表格“ field ”或其他一些。我不太了解 Google API for Spreadsheet 的类结构。那么有人可以帮忙吗?
我需要:
- 当相应工作表中相应列(“地点”)中的值发生更改时,对事件运行事件处理程序
- 从该工作表的列名称获取值
- 获取实际时间
- 将名称和时间写入另一个名为“status_history”的工作表的最后一行(如附加)
我努力尝试写一些东西:(但这确实是糟糕的代码)
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
}
}
}
最佳答案
你快到了。只需要进行一些调整。
使用 onEdit 函数时,您需要保持快速,因为它们被频繁调用。
- 尽可能依赖事件信息,避免调用 Google Apps 服务。
- 如果您必须使用某项服务,请仅在绝对需要时才使用 - 例如,等到您经过判断您是否位于要记录的单元格的
if
语句之后< em>在调用SpreadsheetApp.getActiveSpreadsheet()
之前。 - API 很丰富,因此请寻找能够减少系统调用次数的函数 - 例如,了解
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 .
关于javascript - Google Spreadsheet On 更改将日志写入另一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805727/