过滤并复制到 sheet
Filter and Copy to sheet
我正在使用 Google Sheet,其中我在 A 列中列出了与 sheet 及其姓名相关的人员。在 B 列中,我有应该与他们相关联的数据复制到他们的 sheet。
I have created a sample here to show how it should look. 我还附上了技术上可以满足我要求的代码。唯一需要注意的是,我无法在复制的同时将名称放入 A 列。另外,为了让它工作,我必须手动 select 整个范围,而不是让范围是静态的或动态的(直到最后一行数据)。
如何更改下面的代码(也在 sheet 中)以满足我的需要?下面的代码假定名称始终位于 b 列,并复制包含该名称的整行,而不仅仅是其旁边的数据。
var ss=SpreadsheetApp.getActiveSpreadsheet();
var master = ss.getSheetByName('Home');
var colWidth = master.getLastColumn();// last used col in masterSheet
var sheets = ss.getSheets();// number of sheets
function onOpen() {
var menuEntries = [ {name: "Copy selected Rows to sheets", functionName: "copyRowsOnConditionV2"},
];
ss.addMenu("Copy functions",menuEntries);// custom menu
}
function copyRowsOnConditionV2() {
var sheetNames = [];// array of existing sheet names
var sheets = ss.getSheets();// number of sheets
for(s=0;s<sheets.length;++s){sheetNames.push(sheets[s].getName())};
var selectedfirstRow = ss.getActiveSelection().getRowIndex();
var selectedHeigth = ss.getActiveSelection().getHeight()
var selectedFullRange = master.getRange(selectedfirstRow,1,selectedHeigth,colWidth);
var data = selectedFullRange.getValues();
for(n=0;n<data.length;++n){
if(data[n][1].length<16){
var dest = ss.getSheetByName(data[n][1].toString().replace(/ /g,''));//find the destination sheet
Logger.log(data[n][1].toString().replace(/ /g,''))
var destRange = dest.getRange(dest.getLastRow()+1,1);// define range
master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row
}
}
}
如有任何帮助,我们将不胜感激!
您需要更改在 for 循环中使用的索引。要引用 sheet 中的第一列,请使用索引 0。
for(n=0;n<data.length;++n){
if(data[n][0].length<16){ //index 0 refers to column A
var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet
Logger.log(data[n][0].toString().replace(/ /g,''))
var destRange = dest.getRange(dest.getLastRow()+1,1);// define range
master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row
}
}
我正在使用 Google Sheet,其中我在 A 列中列出了与 sheet 及其姓名相关的人员。在 B 列中,我有应该与他们相关联的数据复制到他们的 sheet。
I have created a sample here to show how it should look. 我还附上了技术上可以满足我要求的代码。唯一需要注意的是,我无法在复制的同时将名称放入 A 列。另外,为了让它工作,我必须手动 select 整个范围,而不是让范围是静态的或动态的(直到最后一行数据)。
如何更改下面的代码(也在 sheet 中)以满足我的需要?下面的代码假定名称始终位于 b 列,并复制包含该名称的整行,而不仅仅是其旁边的数据。
var ss=SpreadsheetApp.getActiveSpreadsheet();
var master = ss.getSheetByName('Home');
var colWidth = master.getLastColumn();// last used col in masterSheet
var sheets = ss.getSheets();// number of sheets
function onOpen() {
var menuEntries = [ {name: "Copy selected Rows to sheets", functionName: "copyRowsOnConditionV2"},
];
ss.addMenu("Copy functions",menuEntries);// custom menu
}
function copyRowsOnConditionV2() {
var sheetNames = [];// array of existing sheet names
var sheets = ss.getSheets();// number of sheets
for(s=0;s<sheets.length;++s){sheetNames.push(sheets[s].getName())};
var selectedfirstRow = ss.getActiveSelection().getRowIndex();
var selectedHeigth = ss.getActiveSelection().getHeight()
var selectedFullRange = master.getRange(selectedfirstRow,1,selectedHeigth,colWidth);
var data = selectedFullRange.getValues();
for(n=0;n<data.length;++n){
if(data[n][1].length<16){
var dest = ss.getSheetByName(data[n][1].toString().replace(/ /g,''));//find the destination sheet
Logger.log(data[n][1].toString().replace(/ /g,''))
var destRange = dest.getRange(dest.getLastRow()+1,1);// define range
master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row
}
}
}
如有任何帮助,我们将不胜感激!
您需要更改在 for 循环中使用的索引。要引用 sheet 中的第一列,请使用索引 0。
for(n=0;n<data.length;++n){
if(data[n][0].length<16){ //index 0 refers to column A
var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet
Logger.log(data[n][0].toString().replace(/ /g,''))
var destRange = dest.getRange(dest.getLastRow()+1,1);// define range
master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row
}
}