2017-05-09 5 views
1

J'essaie de déplacer plusieurs lignes simultanément d'une feuille Google à une autre.Google Script pour déplacer simultanément plusieurs lignes vers une autre feuille - Archiver les lignes et supprimer les actions terminées

Je voudrais exécuter le script une fois à la fin de la journée pour archiver tous les travaux complets.

Le script que j'ai créé ne déplacera que 2 lignes à la fois tant que la cellule ciblée n'est pas vide. Idéalement, il continuerait à faire une boucle et à déplacer uniquement les tâches marquées «Terminé».

La feuille J'utilise est here

function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Admin') 
     .addItem('Archive', 'archive') 
     .addToUi(); 
} 

function archive() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Scheduled"); 
    var range = sheet.getRange('A5:Q200'); 
    var sheetToMoveTheRowTo = "Archive"; 
    var numRows = sheet.getLastRow(); 
    var row = sheet.getRange(5,1); 

    for (var row = 5; row < numRows; row++) 
    { 
    var status = sheet.getRange(row,1).getValue(); 

     if (status == "Complete") { 

    var targetSheet = ss.getSheetByName(sheetToMoveTheRowTo); 
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    sheet.getRange(range.getRow(),1,1, sheet.getLastColumn()).moveTo(targetRange); 
    sheet.deleteRow(range.getRow()); 
    } 
    } 
} 

Répondre

1

Archive, Google Sheets en mouvement, lignes, feuille de calcul, Supprimer

Vous devez définir toutes les données à archiver en une seule opération. Vous ne pouvez pas supprimer toutes les lignes en une seule opération, mais vous pouvez enregistrer les lignes à supprimer, puis faire défiler les numéros de ligne.

Link to Publicly Shared Spreadsheet with Code

j'avais mis en place le code à structurer comme celui-ci:

function archive() { 
    var arrayOfRowsToArchive,data,i,lastColumn,L,numRows,range,rowsToDelete, 
     ss,sheet,sheetToMoveTheRowTo,startRow,status,targetSheet,thisRowsData; 

    //USER INPUT: 

    startRow = 5; 

    //END OF USER INPUT 

    ss = SpreadsheetApp.getActiveSpreadsheet(); 
    sheet = ss.getSheetByName("Scheduled"); 
    sheetToMoveTheRowTo = "Archive"; 
    numRows = sheet.getLastRow(); 
    lastColumn = sheet.getLastColumn(); 

    arrayOfRowsToArchive = []; 
    rowsToDelete = []; 

    data = sheet.getRange(startRow, 1, numRows - startRow, lastColumn).getValues();//Get all values except the header rows 

    L = data.length; 

    for (i=0; i < L; i++) { 
    status = data[i][0]; 
    //Logger.log('status: ' + status); 

    if (status === "Complete") { 
     thisRowsData = data[i];//Only get inner array of data 
     //Logger.log('thisRowsData: ' + thisRowsData) 
     arrayOfRowsToArchive.push(thisRowsData);//Push one row of data to outer array 
     rowsToDelete.push(i+startRow);//Get the row number to delete later 
    } 
    } 

    targetSheet = ss.getSheetByName(sheetToMoveTheRowTo); 
    targetSheet.getRange(targetSheet.getLastRow()+1, 1, arrayOfRowsToArchive.length, arrayOfRowsToArchive[0].length) 
    .setValues(arrayOfRowsToArchive); 

    //Logger.log('rowsToDelete: ' + rowsToDelete) 

    for (i=rowsToDelete.length;i>0;i--) {//Delete from bottom up 
    Logger.log((i-1).toString()) 
    Logger.log('rowsToDelete[i-1]: ' + rowsToDelete[i-1]) 
    sheet.deleteRow(rowsToDelete[i-1]); 
    } 
} 
+0

en plus de script @Sandys un basé sur un temps de déclenchement sera le régler de tous les jours si vous choisissez. https://developers.google.com/apps-script/guides/triggers/installable – OblongMedulla

+0

Je ne suis pas sûr de ce que vous entendez par "clé de retour". –

+0

merci pour l'aide. eu du mal à trouver comment travailler la clé de retour. toujours un problème - le script supprime maintenant les lignes d'en-tête deux à la fois. Après avoir supprimé les lignes d'en-tête, il déplace les deux premières lignes du haut lorsque l'état dans A5 est 'Terminé'. Si l'état dans A5 est vide ou "En cours" et que les lignes d'en-tête sont supprimées, l'erreur suivante apparaît; TypeError: Impossible de lire la propriété "longueur" à partir de indéfini – cmccnn