2017-05-22 2 views
1

Ich verwende ein Google-Blatt, in dem ich eine Liste in Spalte A von Personen habe, die mit ihrem Namen Blatt entsprechen. In Spalte B habe ich Daten, die ihnen zugeordnet werden sollten, um auf ihr Blatt zu kopieren.Filter und kopiere auf Blatt

I have created a sample here to show how it should look. Ich habe auch Code, der technisch macht, was ich will. Der einzige Nachteil ist, dass ich die Namen nicht in die Spalte A bringen kann, während ich noch kopiere. Damit es funktioniert, muss ich den gesamten Bereich manuell auswählen, anstatt den Bereich statisch oder dynamisch zu haben (bis zur letzten Reihe von Daten).

Wie kann ich den Code, den ich unten habe (auch innerhalb des Blattes), an meine Bedürfnisse anpassen? Der folgende Code geht davon aus, dass sich die Namen immer in Spalte b befinden und kopiert die gesamte Zeile mit diesem Namen und nicht nur die Daten daneben.

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 
    } 
    } 
} 

Jede Hilfe wäre willkommen!

Antwort

1

Sie müssen den Index ändern, den Sie in der for-Schleife verwenden. Um auf die erste Spalte in Ihrem Blatt zu verweisen, verwenden Sie den Index 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 
    } 
    } 
Verwandte Themen