【问题标题】:Copying part of a row from one Google spreadsheet to another google spreadsheet based on a value in a cell?根据单元格中的值将行的一部分从一个谷歌电子表格复制到另一个谷歌电子表格?
【发布时间】:2019-02-06 02:08:25
【问题描述】:

我正在尝试编写一个脚本来根据第 11 列 (K) 上是否有“Y”来复制特定行的 B:K 列。

我有脚本可以在同一个电子表格中从一张工作表移动到另一张工作正常,但我真的很努力将一个电子表格转移到另一个电子表格,并且只移动部分行而不是整个事情。

以下是目前为止的脚本...希望得到帮助!

function onEdit() {
    var sss = SpreadsheetApp.openById("15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc").getSheetByName("2018 2 Week Snapshot for Jim"); // sss = source spreadsheet
    var r = sss.getActiveRange();

    if(sss.getName() == "2018 2 Week Snapshot for Jim" && r.getColumn() == 11 && r.getValue() == "Y") {
        var row = r.getRow();
        var numColumns = sss.getLastColumn();
        var tss = SpreadsheetApp.openById("1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So"); // tss = target spreadsheet
        var targetSheet = tss.getSheetByName("Test Sheet"); // ts = target sheet
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        tss.getRange(row, 1, 1, numColumns).copyTo(target);
    }

}

这是我的新代码,还在苦苦挣扎:

function onEdit() {
    var sss = SpreadsheetApp.openById('15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc'); // sss = source spreadsheet
    var ss = sss.getSheetByName('2018 2 Week Snapshot for Jim'); // ss = source sheet
    var SRange = ss.getRange("C:K");

    if(ss.getName() == "2018 2 Week Snapshot for Jim" && SRange.getColumn() == 9 && SRange.getValue() == "y") {
        var row = SRange.getRow();
        var numColumns = ss.getLastColumn();
        var tss = SpreadsheetApp.openById('1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So'); // tss = target spreadsheet
        var ts = tss.getSheetByName('Test Sheet'); // ts = target sheet
        var target = ts.getRange(ts.getLastRow() + 1, 1);
        ss.getRange(row, 1, 1, numColumns).SetValues(target);     
    } 
}

【问题讨论】:

  • 当源电子表格和目标电子表格不同时,copyTo()不能使用。为了复制到其他电子表格,有几种解决方法。那我能问一下你的情况吗?您只想将值复制到其他电子表格?或者您想将值和公式复制到其他电子表格?在这些情况下,this 可能有用。
  • 或者您想将值、公式和格式转至其他电子表格?在这些情况下,this 可能有用。
  • @Tanaike 数据正在从日历发送到第一个电子表格。一组人将与多人一起审查数据。然后,在他们在 K 列中执行特定操作(放置“Y”)后,与不同组相关的数据将发送到他们的电子表格。
  • @Tanaike - 回答您的问题;我没有试图保留任何公式或格式。我只想将单元格中的值从电子表格 1 复制到电子表格 2。
  • 感谢您的回复。我认为在仅将值复制到其他电子表格的情况下,this information 对您很有用。这也是关于将值从电子表格 A 复制到电子表格 B 的方法。但如果这对您的情况没有用处,我很抱歉。

标签: google-apps-script google-sheets google-api google-sheets-api


【解决方案1】:
  • 当用户将yY 放入活动电子表格2018 2 Week Snapshot for Jim 工作表的K 列时,您只想将B:K 的值复制到“工作表”的最后一行测试表”在1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So 的电子表格上。
    • 15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc 的电子表格是活动电子表格。

如果我的理解是正确的,那么这个修改呢?

修改点:

  • setValues()set 是小写。
  • setValues(values)values 是二维数组。
    • setValues(values) 的范围是放置值的范围。
  • 当您使用onEdit() 时,您可以使用事件对象。

上面反映的脚本如下。

修改脚本:

function myFunction(e) {
  var sourceSheetName = "2018 2 Week Snapshot for Jim";
  var destinationSpreadsheetId = "1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So";
  var destinationSheetName = "Test Sheet";

  if (e.source.getSheetName() == sourceSheetName && e.range.getA1Notation()[0] == "K" && e.value.toUpperCase() == "Y") {
    var sourceValues = e.source.getRange("B:K").getValues().filter(function(e){return e.filter(String).length > 0});
    var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
    var ts = tss.getSheetByName(destinationSheetName);
    ts.getRange(ts.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
  }
}

注意:

  • 在使用此脚本之前,请先安装myFunction() 作为可安装触发器。

参考资料:

如果我误解了你的情况,我很抱歉。

【讨论】:

  • @tehhowch 感谢您的评论。我已经忘记了。我更新了。
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多