【问题标题】:onEdit timestamp based on other sheet基于其他工作表的 onEdit 时间戳
【发布时间】:2012-08-02 03:36:39
【问题描述】:

截至目前,Google 电子表格似乎不允许锁定单元格范围,而是必须逐页进行锁定。我想与另一个用户共享一个工作表,并让他们在工作表 1 上输入数据。为了防止篡改,我希望在工作表 2 上复制数据(由我锁定),并在工作表 1 上进行最后一次更改的时间戳。我一直在玩这个 onEdit() 函数,但是当我编辑 Sheet 1 时它没有给出更新的时间,但仍然只有在我编辑 Sheet 2 时才给出。我只是还没弄清楚我做错了什么。

function onEdit(e) 
{
  var ss = e.source.getActiveSheet();
  var rr  = e.source.getActiveRange();

//comment 2 lines below if you want it working on all sheets, not just on 2nd one
  if(ss.getIndex()!= 2)
    return;
 ///
  var firstRow = rr.getSheetByName(Sheet2).getRow();
  var lastRow = rr.getSheetByName(Sheet2).getLastRow();

//the last modified date will appear in 12th column
  for(var r=firstRow; r<=lastRow; r++)
    ss.getRange(r, 12).setValue(new Date());
}

还有其他方法可以做到这一点吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您不能使用脚本来防止其他用户篡改,因为 他可以转到工具>脚本编辑器并编辑您的脚本,以便它 变得空闲,然后编辑 Sheet1,然后恢复您的脚本。 有关此问题,请参阅 the issue tracker。您无法保护您的脚本 避免被您与之共享至少一个电子表格工作表的其他用户编辑。

    另一方面,抛开脚本,你总能看到 由谁以及何时编辑的历史:文件>查看修订历史。

    【讨论】:

      【解决方案2】:

      我发现了几个问题。首先,您尝试在范围对象上使用.getSheetByName(),但该方法仅受电子表格对象支持。您可以在一个范围内运行.getSheet(),这将返回该范围所在的工作表。其次,格式化:GAS 需要标准的Javascript,这意味着您的iffor 函数需要有{}。这应该适用于您想要的:

      onEdit(e){
      if(e.range.getSheet().getSheetName()!="Sheet2"){
       var row1=e.range.getRow();
       var col2=e.range.getColumn();
       var row2=e.range.getLastRow();
       var col2=e.range.getLastColumn();
       var data=e.range.getValues();//the data to be copied
       var copySheet=e.source.getSheetByName("Sheet2");//sheet you want to copy to
       var copyRange=copySheet.getRange(row1,col1,row2-row1,col2-col1);// the range data will be copied to
       var time=new Date();
       var timeRange=copySheet.getRange(row,col);//wherever you want the time signature to be. 
       timeRange.setValue(time);//inserts time stamp into sheet
       copyRange.setValues(data);//copies data to the range
      }
      }
      

      只需将rowcol 替换为您要放置时间的行和列。它采用已编辑的范围并将其复制到工作表 2 上的相同位置,因此仅当工作表 1 是唯一要编辑的工作表时才有效。否则你最终会得到重叠的数据。您还可以设置一个时间戳以适应范围,这意味着将其位置设置为(row1,col2+5)。这将把它放在编辑范围右侧的 5 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 2018-05-26
        • 2020-11-06
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        相关资源
        最近更新 更多