2016-02-24 2 views
0

Je suis totalement nouveau sur Google Script alors faites comme moi. J'essaye d'écrire un script qui prendra des données de plusieurs rangées et colonnes et le réécrira alors dans une colonne simple avec l'espacement.Copier les données de ligne et de colonne dans la colonne google script

si la rangée

1a 1b 1c

2a 2b 2c

3a, 3b, 3c

va devenir ...

1a

1b

1c

2a

2b

2c

etc ...

Je n'ai pas vraiment quoi que ce soit à ce jour. Je ne comprends pas comment chaque élément de données est accédé dans le tableau. Toute aide/orientation serait appréciée.

function copyRow(){ 
var sheet = SpreadsheetApp.getActive(); 
var numRows = sheet.getDataRange().getNumRows(); 
var rowIdx = sheet.getActiveRange().getRowIndex(); 
sheet.getRange(rowIdx,1,1,sheet.getLastRow()).getValues(); 

for(var i=0; i<numRows; i++){ 

} 
} 

Répondre

0

Essayez ce code. La méthode getValues() obtient un tableau à deux dimensions. Chaque tableau interne est une nouvelle ligne. Chaque élément de chaque tableau interne est une cellule dans une nouvelle colonne. Le tableau 2D peut être réduit en un tableau régulier, sans tableau externe. Mais pour écrire les valeurs, un tableau 2D est nécessaire, donc le code ci-dessous crée un nouveau tableau 2D. Chaque tableau interne n'a qu'une seule valeur.

function copyRow() { 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getActiveSheet(); 

    var numRows = sheet.getLastRow(); 
    var rowIdx = sheet.getActiveRange().getRowIndex(); 
    Logger.log('rowIdx: ' + rowIdx); 

    //getRange(start row, start column, number of rows, number of columns) 
    var theValues = sheet.getRange(rowIdx,1,sheet.getLastRow()).getValues(); 
    Logger.log('theValues.length: ' + theValues.length); 

    theValues = theValues.toString().split(",");//convert 2D array to 1D 
    Logger.log('theValues.length: ' + theValues.length); 

    var outerArray = []; 

    for(var i=0; i<theValues.length; i++){ 
    Logger.log('theValues[i]: ' + theValues[i]); 
    outerArray.push(theValues[i]); 
    }; 

    Logger.log('outerArray.length: ' + outerArray.length); 
    sheet.getRange(1,1,outerArray.length,outerArray[0].length).setValues(outerArray); 
}; 

Essayez-le et voyez si cela fonctionne, faites le moi savoir.

+0

Salut Sandy merci pour la réponse, j'obtiens une erreur Impossible de trouver la méthode getRange (nombre, nombre, nombre). (ligne 7, fichier "Code") –

+0

Voir la mise à jour. Remplacez les lignes par ceci: 'var ss = spreadsheetApp.getActive(); var sheet = ss.getActiveSheet();' –

+0

Arrêtez-vous en changeant sheet.getRange en sheet.getActiveSheet(). GetRange. Avoir une nouvelle erreur maintenant Impossible de convertir un tableau en objet dans la dernière ligne. –

0

Vous n'avez pas besoin de script. Mettez simplement cette formule dans une cellule:

=transpose(split(join(" ",A1:A3)," ")) 

Vous pouvez joindre plusieurs lignes et colonnes. J'ai testé cela sur des données comme vous l'avez fourni dans la colonne A & B lignes 1 à 3. Fonctionne bien.

=transpose(split(join(" ",A1:A3,B1:B3)," ")) 
+0

Merci pour le conseil. Je dois pouvoir saisir plusieurs lignes et colonnes à la fois. Je peux seulement sembler obtenir ceci pour fonctionner avec une rangée à la fois. –

0

Cela semble fonctionner. Itère manuellement dans le tableau et le définit avec une boucle for.

function copyRow() { 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getActiveSheet(); 

    var numRows = sheet.getLastRow(); 
    var rowIdx = sheet.getActiveRange().getRowIndex(); 
    var colIdx = sheet.getActiveRange().getColumnIndex(); 

    var theValues = sheet.getRange(rowIdx,colIdx,sheet.getLastRow(),3).getValues(); 

    theValues = theValues.toString().split(",");//convert 2D array to 1D 

    var outerArray = []; 

    for(var i=0; i<theValues.length; i++){ 
    outerArray.push(theValues[i]); 
    }; 
Logger.log(outerArray); 

// sheet.getRange(1,1,outerArray.length,30).setValues(outerArray); 

    for(var i = 0; i < outerArray.length; i++){ 
    sheet.getRange(30 + i, 1).setValue(outerArray[i]); 
    } 
};