我有一张非常大的数据表,其中的评论应用于不同的项目(共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
表单“表单回复新”通过表单接收用户的评论,并在审核和提交后手动剪切并粘贴到“已发送”表单中。
答案 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代替。