【问题标题】:How can I copy specific values from 1 Google Sheet and paste to another Sheet using Google Script?如何使用 Google 脚本从 1 个 Google 工作表中复制特定值并粘贴到另一个工作表?
【发布时间】:2020-05-06 15:51:56
【问题描述】:

所以我已经有一个脚本,可以将整行从一张纸复制/粘贴到另一张纸上。但我只对复制/粘贴特定单元格感兴趣。例如,如果 C 列 = 已批准,则复制源工作表中 G 列中的值并粘贴到目标工作表 H 列中的新行。以下是示例截图和我当前的代码:

源表(仅复制 G 列中的电子邮件) Source Sheet

目标表(在 H 列中粘贴电子邮件) Destination sheet

function copyrange() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Test 2'); //source sheet
  var testrange = sheet.getRange('C:C'); //range to check
  var testvalue = (testrange.getValues());
  var csh = ss.getSheetByName('Test'); //destination sheet
  var data = [];
  var j =[];

  //Condition check in H:H; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
  if ( testvalue[i] == 'Approved') {
  data.push.apply(data,sheet.getRange(i+1,1,1,25).getValues());
  //Copy matched ROW numbers to j
  j.push(i);
 }
 }
//Copy data array to destination sheet

 csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);

//Delete matched rows in the source sheet
  for (i=0;i<j.length;i++){
  var k = j[i]+1;
  sheet.deleteRow(k);

//Alter j to account for deleted rows
  if (!(i == j.length-1)) {
  j[i+1] = j[i+1]-i-1;
}
}
}

有没有人能帮我解决这个问题!?我将不胜感激 :) 谢谢!

【问题讨论】:

  • 如果您共享具有公共编辑权限的工作表并提供链接会更好。你想要达到的目标还不清楚。如果您想将“已批准”行从源传输到目标,我建议您引入一个带有“更新”的新列,并使用该列更新目标工作表并将值设置为“更新”,而不是删除它。您可以定期自动运行此功能
  • 现有代码面临的问题是什么?我可以看到,只有从下到上,按行号删除才会起作用。否则,行号会随着删除而改变,你的循环会失败
  • @arulselvan 很抱歉造成混乱。所以现在,它正在查看源工作表中的哪些行在 C 列中显示“已批准”。如果批准 == True,那么我想复制源工作表 G 列中的值并粘贴到目标工作表的 H 列。我想我需要更新 getRange 元素,但无法弄清楚它需要什么。现在,它只是复制/粘贴所有值(整行)。这说明清楚了吗?
  • 有一些专门为此目的创建的插件。请检查您是否对插件感兴趣。 gsuite.google.com/u/0/marketplace/app/flow/909859924833
  • @AneesHameed 谢谢!肯定会在我的个人笔记本电脑上试试这个。不幸的是,我可以在我的组织中使用这个插件,这就是我遇到上述脚本问题的地方。

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


【解决方案1】:

我做了一些更正。没有您的样品表无法测试


function copyrange() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var srcsht = ss.getSheetByName('Test 2'); //source sheet
  var srcrange = sheet.getRange('C:G'); //range to check - edited
  var srcvals= testrange.getValues(); // edited
  var dessht = ss.getSheetByName('Test'); //destination sheet
  var emails =  [];
  var delrows =[];

  //Condition check in H:H; If true copy the same row to data array
for (i=0; i < srcvals.length;i++) {
  if ( srcvals[i][0] == 'Approved') {
   emails.push(srcvals[i][4]) ; //edited - col G of same row
  //Copy matched ROW numbers to j
  delrows.push(i);
 }
 }
//Copy data array to destination sheet

 dessht.getRange(dessht.getLastRow()+1,1,emails.length,emails[0].length).setValues(emails);

//Delete matched rows in the source sheet
  for (i= delrows.length; i > 0; i--){
   srcsht.deleteRow(delrows[i]+1);
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2023-01-15
    相关资源
    最近更新 更多