将特定数据复制到其他sheet(带脚本)
Copy specific data to other sheet (with script)
https://docs.google.com/spreadsheets/d/1mpALs4rdNj-TFFgCQ0CEBP453v-FfQJR_bBxOzQakWU/edit#gid=1256640730
(任何拥有 link 的人都可以查看此传播sheet)
我有一个“主列表”sheet 从 Google 表单收集数据,我需要脚本根据它们的“位置”将数据复制到相关的 sheet。 .othersheet的名字取自“Location”
Example 1
Sheet 1: Contain all the data (Master List)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Penang
Stone......5,Jae Road,22222...............Penang
Sheet 2: Copy data from Sheet 1 (Location-Kedah Only)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Kedah
Sheet 3: Copy data from Sheet 1 (Location-Penang Only)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Penang
Stone......5,Jae Road,22222.........Penang```
Example 2
Sheet 1: Contain all the data (Master List)
Name.....Gender
Bryan.....Male
Mei.....Female
Lily.....Female
xx.....Female
xx.....Male
Sheet 2: Copy data from Sheet 1 (Gender-Female Only)
Name.....Gender
xx.....Female
Lily.....Female
Mei.....Female
Sheet 3: Copy data from Sheet 1 (Gender-Male Only)
Name.....Gender
Bryan.....Male
function copyDataUniqueToColG() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Master List');
const shsr=2;//data start row on master list
const shhr=1;//master list header row
const hA=sh.getRange(shhr,1,1,sh.getLastColumn()).getValues().map(function(r){return[r[1],r[2],r[3],r[4],r[5],r[6]]})[0];
const vs=sh.getRange(shsr,1,sh.getLastRow()-shsr+1,sh.getLastColumn()).getValues();
const base='Sheet';
let shts=ss.getSheets();
//shts.forEach(function(s,i){if(s.getName()!='Master List'){ss.deleteSheet(s);}});//delete all other sheets
const gvs=sh.getRange(shsr,7,sh.getLastRow()-shsr+1,1).getValues().map(function(r){return r[0]});
const s=new Set(gvs);
const g=[...s];//g has unique values now
g.forEach(function(v,i){
let sA=[];
ss.getSheets().forEach(function(obj){sA.push(obj.getName())});
if(sA.indexOf(v)==-1){ss.insertSheet(v);}
let aA=[]
aA.push(hA);//start with header row
vs.forEach(function(r,j){
//compare to column G value
if(r[6]==v) {
aA.push([r[1],r[2],r[3],r[4],r[5],r[6]]);//add rows that match
}
});
let dsh=ss.getSheetByName(v);
dsh.getRange(1,1,aA.length,aA[0].length).setValues(aA);
SpreadsheetApp.flush();//not really necessary but fun to watch the progress
});
}
在 Melaka
sheet 中将其粘贴到 A2 中:
=FILTER('Master List'!A:M, 'Master List'!G:G="Melaka")
其他等等...
或者你可以在 A1 中使用这个:
=QUERY('Master List'!A:M, "where G = 'Melaka'", 1)
或者如果你想使用Apps Script,可以使用方法Range.setFormula():
Range.setFormula("=QUERY('Master List'!A:M, 'where G = \"Melaka\"', 1)")
请记住 Stack Overflow 不是代码编写服务。社区中的人回答编程和代码相关的问题,但不在那里为其他人编写代码。
有了答案和评论中的信息,你要多多尝试,不明白的继续提问。如果代码是为您编写的,您不太可能会学习。话虽如此,由于您是新用户,这里有一个示例代码可以解决您的问题:
function distributeMasterToSheets(){
// Get all sheets except master list
var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var destinationSheets = allSheets.slice(1);
// And set the sheet name dependent formula in range A1
destinationSheets.forEach(
function(sheet){
sheet.getRange("A1").setFormula("=QUERY('Master List'!A:M,\"select * where G = '"+sheet.getName()+"'\",1)")
}
)
}
下面的文档解释了所使用的方法,我建议您通过一些快速入门来掌握它。
参考文献:
https://docs.google.com/spreadsheets/d/1mpALs4rdNj-TFFgCQ0CEBP453v-FfQJR_bBxOzQakWU/edit#gid=1256640730 (任何拥有 link 的人都可以查看此传播sheet)
我有一个“主列表”sheet 从 Google 表单收集数据,我需要脚本根据它们的“位置”将数据复制到相关的 sheet。 .othersheet的名字取自“Location”
Example 1
Sheet 1: Contain all the data (Master List)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Penang
Stone......5,Jae Road,22222...............Penang
Sheet 2: Copy data from Sheet 1 (Location-Kedah Only)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Kedah
Rose.......21,Radje Road,88888.........Kedah
Sheet 3: Copy data from Sheet 1 (Location-Penang Only)
Name......Address...............................Location
Rose.......21,Radje Road,88888.........Penang
Stone......5,Jae Road,22222.........Penang```
Example 2
Sheet 1: Contain all the data (Master List)
Name.....Gender
Bryan.....Male
Mei.....Female
Lily.....Female
xx.....Female
xx.....Male
Sheet 2: Copy data from Sheet 1 (Gender-Female Only)
Name.....Gender
xx.....Female
Lily.....Female
Mei.....Female
Sheet 3: Copy data from Sheet 1 (Gender-Male Only)
Name.....Gender
Bryan.....Male
function copyDataUniqueToColG() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Master List');
const shsr=2;//data start row on master list
const shhr=1;//master list header row
const hA=sh.getRange(shhr,1,1,sh.getLastColumn()).getValues().map(function(r){return[r[1],r[2],r[3],r[4],r[5],r[6]]})[0];
const vs=sh.getRange(shsr,1,sh.getLastRow()-shsr+1,sh.getLastColumn()).getValues();
const base='Sheet';
let shts=ss.getSheets();
//shts.forEach(function(s,i){if(s.getName()!='Master List'){ss.deleteSheet(s);}});//delete all other sheets
const gvs=sh.getRange(shsr,7,sh.getLastRow()-shsr+1,1).getValues().map(function(r){return r[0]});
const s=new Set(gvs);
const g=[...s];//g has unique values now
g.forEach(function(v,i){
let sA=[];
ss.getSheets().forEach(function(obj){sA.push(obj.getName())});
if(sA.indexOf(v)==-1){ss.insertSheet(v);}
let aA=[]
aA.push(hA);//start with header row
vs.forEach(function(r,j){
//compare to column G value
if(r[6]==v) {
aA.push([r[1],r[2],r[3],r[4],r[5],r[6]]);//add rows that match
}
});
let dsh=ss.getSheetByName(v);
dsh.getRange(1,1,aA.length,aA[0].length).setValues(aA);
SpreadsheetApp.flush();//not really necessary but fun to watch the progress
});
}
在 Melaka
sheet 中将其粘贴到 A2 中:
=FILTER('Master List'!A:M, 'Master List'!G:G="Melaka")
其他等等...
或者你可以在 A1 中使用这个:
=QUERY('Master List'!A:M, "where G = 'Melaka'", 1)
或者如果你想使用Apps Script,可以使用方法Range.setFormula():
Range.setFormula("=QUERY('Master List'!A:M, 'where G = \"Melaka\"', 1)")
请记住 Stack Overflow 不是代码编写服务。社区中的人回答编程和代码相关的问题,但不在那里为其他人编写代码。
有了答案和评论中的信息,你要多多尝试,不明白的继续提问。如果代码是为您编写的,您不太可能会学习。话虽如此,由于您是新用户,这里有一个示例代码可以解决您的问题:
function distributeMasterToSheets(){
// Get all sheets except master list
var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var destinationSheets = allSheets.slice(1);
// And set the sheet name dependent formula in range A1
destinationSheets.forEach(
function(sheet){
sheet.getRange("A1").setFormula("=QUERY('Master List'!A:M,\"select * where G = '"+sheet.getName()+"'\",1)")
}
)
}
下面的文档解释了所使用的方法,我建议您通过一些快速入门来掌握它。