【问题标题】:Transfer google sheet rows to another sheet based on cell基于单元格将谷歌工作表行转移到另一个工作表
【发布时间】:2018-04-13 18:10:47
【问题描述】:


感谢您花时间查看我的问题。
我正在考虑根据单元格值将数据行传输到新电子表格中。
我自己找到了一些示例,但不能完全满足我的确切需求。如果我忽略了任何以前回答的问题,请指出我正确的方向。我能够实现的最接近的是我当前的代码。

我正在研究当 E =“Y”从 COPY 表复制到 PASTE 表时将 A-E 列中的数据复制 - 下面是表的示例。 我当前的问题是,它复制所有数据,即使 D 不是“Y”,并为“Y”的每个实例复制它。
因此,如果我在 E 列中有 3 个“Y”,那么它将被复制 3 次。
Copy From this Sheet
Paste to this Sheet

function transfer() {
 var sss = SpreadsheetApp.getActiveSpreadsheet();
 var ss = sss.getSheetByName('COPY'); 
 var range = ss.getRange('A2:E'); 
 var data = range.getValues();
  
  for (var i = 0; i <data.length; ++i){
   var row = data[i];
   var check = row[4];
 
   var tss = SpreadsheetApp.openById("1qxR-L2-Tj7slZQ0NMbQl0-JXZ8iVO59410ccVNZk7Ys");
   var ts = tss.getSheetByName('PASTE');
   
   if (check == "Y") {
     ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
   }
 }
}

【问题讨论】:

  • 正如答案中所指出的,尝试用ts.appendRow(row)替换ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
  • @Umair - 感谢您对这个答案的帮助。你能看到脚本需要一段时间才能改进吗
  • 您可以为此发布一个新问题吗?那时我很想回答。
  • @umair 嘿 - 如果你想回答,我问了一个新问题。

标签: google-apps-script google-sheets


【解决方案1】:

您的“数据”变量存储来自源工作表的所有值,因此调用 setValues(data) 会将所有内容传输到目标工作表。为简单起见,您可以将其替换为:

ts.appendRow(row);

另一个问题是您如何调用“getRange()”方法:

sheet.getRange(startRow, startColumn, numberOfRows, numberOfColumns);

在您的情况下,行数等于 data.length 而它必须为 1,因为您只需要复制一行。

【讨论】:

  • 谢谢!这已经奏效了。起初我不确定如何添加它,但另一条评论帮助了我。我担心它会有点慢,因为我要复制和粘贴更多的数据。
  • 如果您需要处理大量数据,您应该先过滤值数组,然后在一次调用中写入目标电子表格 (targetRange.setValues(filteredValues))。行数将等于filteredValues.length。由于多次调用,在单个行上循环确实会非常缓慢。
猜你喜欢
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多