Javascript Google sheet使用sellected columns脚本创建单独的日志页面
我有谷歌表的问题。我的主页(名称为“main”)从其他页面收集数据。 “MAIN”表如下所示: 我想创建一个单独的日志页面,当有人更改他的酒店时,它只收集“主”表数据,就在他的名字旁边。(主表上的酒店列是第四列) …所以“日志表”需要收集第1、2、4列以及时间戳 所以最后会有一个名单(谁去了,哪个酒店,什么时候去的)。它应该是这样的, 但我写不出来:/Javascript Google sheet使用sellected columns脚本创建单独的日志页面,javascript,google-apps-script,google-sheets,triggers,timestamp,Javascript,Google Apps Script,Google Sheets,Triggers,Timestamp,我有谷歌表的问题。我的主页(名称为“main”)从其他页面收集数据。 “MAIN”表如下所示: 我想创建一个单独的日志页面,当有人更改他的酒店时,它只收集“主”表数据,就在他的名字旁边。(主表上的酒店列是第四列) …所以“日志表”需要收集第1、2、4列以及时间戳 所以最后会有一个名单(谁去了,哪个酒店,什么时候去的)。它应该是这样的, 但我写不出来:/ function onEdit(e) { var sheetsToWatch = ["MAIN"]; var
function onEdit(e) {
var sheetsToWatch = ["MAIN"];
var changelogSheetName = ["LogSheet"];
var timestamp = new Date();
var row = e.range.getRow();
var col = e.range.getColumn();
var sheetName = sheet.getName();
if(col === 4 && row > 1 && e.source.sheetsToWatch() .getName() === "MAIN" ){
e.changelogSheetName().getRange('MAIN', row,1).setValue(new Date());
}
}
对于和变量的用法存在一些混淆
()
-()
保留用于函数调用[]
括号中。[]
括号将变量指定为数组,需要以不同的方式处理==
e.source
返回进行编辑的电子表格。查询e.source.getActiveSheet()
时,在大多数情况下,您将正确获得进行编辑的工作表,但为了考虑异常情况,最好将事件对象范围
与方法一起使用函数onEdit(e){
var sheetsToWatch=[“主”,“如果需要,添加另一张表”];
var changelogSheetName=“日志表”;
var logSheet=SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
var timestamp=新日期();
var row=e.range.getRow();
var col=e.range.getColumn();
var sheet=e.range.getSheet();
var sheetName=sheet.getName();
Logger.log(例如range.getSheet().getName());
如果(列===4&&row>1&&sheetsToWatch.indexOf(sheetName)!=-1){
logSheet.getRange(第1行).setValue(新日期());
//你还想做什么就做什么
}
}
以单页作为变量的样本
函数onEdit(e){
var sheetsToWatch=“MAIN”;
var changelogSheetName=“日志表”;
var logSheet=SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
var timestamp=新日期();
var row=e.range.getRow();
var col=e.range.getColumn();
var sheet=e.range.getSheet();
var sheetName=sheet.getName();
Logger.log(例如range.getSheet().getName());
如果(col==4&&row>1&&sheetsToWatch==sheetName){
logSheet.getRange(第1行).setValue(新日期());
//你还想做什么就做什么
}
}
为了更好地理解,请参考应用程序脚本和
更新
对于您的情况,最方便的方法是从编辑的行中检索值,并按照所需的顺序将它们附加到日志表中
样本
函数onEdit(e){
var sheetsToWatch=“MAIN”;
var changelogSheetName=“日志表”;
var logSheet=SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
var timestamp=新日期();
var row=e.range.getRow();
var col=e.range.getColumn();
var sheet=e.range.getSheet();
var sheetName=sheet.getName();
如果(col==4&&row>1&&sheetsToWatch==sheetName){
var values=sheet.getRange(行,1,1,4).getValues()[0];
logSheet.appendRow([new Date(),值[0],值[1],值[3]]);
}
}
请提高您的问题质量,我认为解决方案会很快出现。如果您难以描述问题,请随意发布一些带有输入和预期输出的图像。准确显示工作表的结构和所有名称。最好创建一份文件副本并与我们共享。Tha非常好的解释!谢谢你的详细回答。这真的帮助了我学习。*但现在,日志表不是日志列表。*如果更改发生在“MAIN”的第9行,它将出现在“LogSheet”的第9行。*但我真正想要的是一个汇总列表-所有更改的日志文件。就像历史检查一样。谁去了X hotel previously..这是什么时候发生的,可能有好几次都发生了…如果有人改变它,唯一的触发器将是“MAIN”的第4列;它需要自动捕获这些单元格(在我更新的图片上)我不太清楚您到底想要检索什么数据以及在哪里设置,但我希望它能帮助您知道,有一个事件对象e.oldValue
,允许您检索旧酒店名称(在更改之前)和与新值相对应的e.value
。getRange()
允许您指定要从中获取值或设置值的行和列。我希望这对您有所帮助!如果没有,请尝试以这种方式修改您的问题(使用已定义的示例)你的问题变得更清楚了。这对我很有帮助,但它们仍然不正常。我在这个链接上创建了我的数据表的小示例,你需要公开电子表格,以便我可以打开它。