2017-01-18 12 views
1

Ich muss eine Funktion aufrufen, die alle Zeilen mit einer Menge größer als Null von der ersten Registerkarte (Bestellhilfe) kopieren und Daten auf der zweiten Registerkarte einfügen (Einkaufsauftrag) in derselben Tabelle. Siehe freigegebenes Dokument.Google-Tabelle: Kopieren von Zeilen aus einem Bereich basierend auf einem Zellenwert in dieser Zeile

https://docs.google.com/spreadsheets/d/1Ajccn3ZYtmd8WTFI3baDUd5eyRfCDXa1-cQJt7RGObE/edit?usp=sharing

Kann jemand mit diesem bitte helfen Sie mir. Ich habe den folgenden Code geschrieben, aber es funktioniert nicht.

function AddLines(event) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var r = SpreadsheetApp.getActiveSpreadsheet().getActiveRange(); 

    if(s.getName() == "Ordering guide" && r.getColumn() == 8 && r.getValue()>0) { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Purchase Order"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).copyTo(target); 
    } 
} 

Antwort

1

Ich habe eine Kopie Ihrer Tabelle erstellt und versucht, das Skript zu beheben. Hier ist die neue Kopie der Tabelle mit festem Code und funktioniert gut.

Copy of PO Generation Spreasheet

Hier ist der feste Code.

//Generate Purchase Order 
function generatePO() { 
    var ss = SpreadsheetApp.getActive(); 
    var ogSheet = ss.getSheetByName('Ordering guide'); 
    var poSheet = ss.getSheetByName('Purchase Order'); 
    var lookupData = ogSheet.getRange(5, 1, ogSheet.getLastRow()-4, 9).getValues(); 
    var targetData = []; 
    for(var i=0; i<lookupData.length; i++){ 
    if(lookupData[i][7] && lookupData[i][7] > 0){ 
     targetData.push(lookupData[i]); 
    } 
    } 
    poSheet.getRange(5, 1, 50-4, 9).clearContent(); 
    poSheet.getRange(5, 1, targetData.length, 9).setValues(targetData); 
    poSheet.activate(); 
} 

//Reset Quantities 
function resetQuantity(){ 
    var ss = SpreadsheetApp.getActive(); 
    var ogSheet = ss.getSheetByName('Ordering guide'); 
    var qtyRange = ogSheet.getRange(5, 8, ogSheet.getLastRow()-4, 1).clearContent(); 
} 
+0

Waqar. Danke für den obigen Code. Es hat super funktioniert. Jetzt versuche ich auch, eine E-Mail-Schaltfläche zu dieser Datei hinzuzufügen, die nur die generierte Bestellung im PDF-Format per E-Mail versenden kann. Ich konnte das Skript ausführen, wenn ich als Eigentümer angemeldet bin, aber nicht anders, da auf der Registerkarte "Bestellanleitung" nur wenige geschützte Zellen vorhanden sind. Die Nachricht sagt: "Sie versuchen, geschützte Zellen zu bearbeiten. Bitte kontaktieren Sie den Besitzer." Gibt es einen Weg dahin? – NSaini

+0

Hier ist der Code, den ich für die E-Mail-Taste verwendet habe: var sheet_to_send = 'Bestellung'; // ----------------------------- var as = SpreadsheetApp.getActiveSpreadsheet(); var Blätter = as.getSheets(); für (var i in Sheets) { if (Blätter [i] .getName()! = Sheet_to_send) { Blätter [i] .hideSheet(); } } MailApp.sendEmail ('[email protected] ',' American Hotel-Bestellung ',' Attached ist die Reihenfolge für die Verarbeitung. ', {Attachments: SpreadsheetApp.getActiveSpreadsheet()}); für (var i in Sheets) { if (Blätter [i] .getName()! = Sheet_to_send) { Blätter [i] .showSheet(); } } – NSaini

+0

In Anlagen müssen Sie eine PDF-Datei exportieren und dann PDF-Blob anhängen. –

Verwandte Themen