我正在使用Google工作表,其中我在列A中列出了与工作表名称相关的人员。在B列中,我有与之关联的数据,以便复制到其工作表中。
I have created a sample here to show how it should look.我还附加了从技术上做我想要的代码。唯一需要注意的是,在复制时我无法将名称输入A列。此外,为了使其工作,我必须手动选择整个范围,而不是将范围设置为静态或动态(直到最后一行数据)。
如何更改下面的代码(也在表格内)以满足我的需求?下面的代码假定名称始终在列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
}
}
}
任何帮助将不胜感激!
答案 0 :(得分:2)
您需要更改for循环中使用的索引。要引用工作表中的第一列,请使用索引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
}
}