源表和目标表的动态链接

时间:2016-05-12 14:31:47

标签: google-sheets

我有一张非常大的数据表,其中的评论应用于不同的项目(共16个)。每个评论都有一个状态,如活动,确认,取消或空白(如果不适用)应用于项目

用户很难使用源表中的过滤器更新状态,因为当许多用户使用该表时,他们无法同时应用不同的过滤器。

最好的方法是将源表中的所有数据提取到多个目标表(每个项目一个)并根据项目应用过滤器,以便用户可以更新目标表中的状态。我的问题是如何从目标表到源表中获取新的更新状态。

我找到了一个脚本,当我在源表中更改或添加内容时自动更新所有目标表,但是当我更改目标表(项目表)中的状态时,我还需要更新源表。见下面的脚本:

function getdata() {
  var files = DriveApp.getFolderById(""folder key with target sheets"").getFiles()
    while (files.hasNext()) {
      var file = files.next();
      var shoot = SpreadsheetApp.openById(file.getId());

      var sourcesheet = SpreadsheetApp.getActive().getSheetByName(""source sheet name"");
      var sourcerange = sourcesheet.getRange('A:AE');
      var sourcevalues = sourcerange.getValues();

    var destsheet = shoot.getSheetByName('target sheets name same for all'); 
      var destrange = destsheet.getRange('A:AE'); 
    destrange.setValues(sourcevalues);         

请参阅以下资料表的链接:

https://docs.google.com/spreadsheets/d/1h0mpPo2nl9AoCF-hJDjMaU3sZg-qBX4dat7Ig4poAJo/edit?usp=sharing

表单“表单回复新”通过表单接收用户的评论,并在审核和提交后手动剪切并粘贴到“已发送”表单中。

1 个答案:

答案 0 :(得分:0)

您可能希望在单页中为每个项目制作filter views。过滤器视图仅适用于使用它的人,不会为其他人修改它。从您的问题来看,这可能是比同步脚本更好的解决方案。

然而,要回答问题,每个项目表中的onEdit event可以管理反向更新。

function onEdit(event){
  var range = event.range;
  if(range.getSheet().getName() == "Sheet1" && range.getColumn() > 1 && range.getRow() > 1 ){//example conditionals to limit the action to exclude headers or other static data could be changed to work specific cells or ranges
    var mainsheet = SpreadsheetApp.openByUrl("main spreadsheet URL").getSheetByName("destination sheet");
    var dataA1 = range.getA1Notation();
    range.copyTo(mainsheet.getRange(dataA1));

  }
}

这是一个简单的触发器,需要您的用户拥有对主工作表的编辑权限。如果您不想授予他们访问权限,则可以使用installable trigger代替。