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 Google sheet使用sellected columns脚本创建单独的日志页面_Javascript_Google Apps Script_Google Sheets_Triggers_Timestamp - Fatal编程技术网

Javascript Google sheet使用sellected columns脚本创建单独的日志页面

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

我有谷歌表的问题。我的主页(名称为“main”)从其他页面收集数据。 “MAIN”表如下所示:

我想创建一个单独的日志页面,当有人更改他的酒店时,它只收集“主”表数据,就在他的名字旁边。(主表上的酒店列是第四列)

…所以“日志表”需要收集第1、2、4列以及时间戳

所以最后会有一个名单(谁去了,哪个酒店,什么时候去的)。它应该是这样的, 但我写不出来:/

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()
    允许您指定要从中获取值或设置值的行和列。我希望这对您有所帮助!如果没有,请尝试以这种方式修改您的问题(使用已定义的示例)你的问题变得更清楚了。这对我很有帮助,但它们仍然不正常。我在这个链接上创建了我的数据表的小示例,你需要公开电子表格,以便我可以打开它。