【发布时间】: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