当前,我们有一个电子表格用作主作业列表(1)。此工作表中的每一行代表一个包含许多信息列的作业或项目。
一个团队对满足特定条件的作业(行)进行过滤(1),然后将字段从过滤后的行复制到单独的电子表格(2)。
一旦将数据添加到电子表格(2),就会添加其他信息列来提供项目跟踪功能,因此该信息不会被(1)中的数据覆盖
目标是编写一个函数,该函数可以通过以下操作自动在(1)和(2)之间进行手动复制和粘贴:
从一组数据中检索某些已过滤的条目(1),然后将该过滤后的数据与另一组数据进行比较(2)。如果(2)缺少(1)中的任何项目,则需要将(1)的某些部分添加到(2)中。
我认为所需的步骤可以定义为:
谢谢克里斯基勒,我从中抢了大部分代码https://gist.github.com/chrislkeller/4026676
我提供了两个文档的链接,这些文档称为样本。
// create menu buttons
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [{
name: "Sync Spreadsheet Data",
functionName: "copyDataToWorkingSpreadsheet"
}];
ss.addMenu("Data Update Functions", menuEntries);
};
// copy data from form sheet to live mapping sheet
function copyDataToWorkingSpreadsheet() {
// source doc
var sss = SpreadsheetApp.openById('15yyfoAu0rgI4_n_LZ4NYbdfYNi_sfAQs4kSz_syMdVY');
// source sheet
var ss = sss.getSheetByName('Sheet1');
// Get full range of data
var SRange = ss.getDataRange();
// get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
// get the data values in range
var SData = SRange.getValues();
// target spreadsheet
var tss = SpreadsheetApp.openById('15O1DFzadu7n23WxRydKht-5Xnra4YFCGOYSy0wHWjs0');
// target sheet
var ts = tss.getSheetByName('10.1');
// set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
// pick column G to remove unwanted rows
var r = ts.getRange('G:G');
var v = r.getValues();
for(var i=v.length-1;i>=0;i--)
if(v[0,i]!= 'Project (Active)')
ts.deleteRow(i+1);
};