1

Je suis un débutant en programmation. L'extrait de code ci-dessous dans mon projet GS fonctionne très bien.Google App Script - Comment définir une valeur de fichier de feuille de calcul à partir d'une chaîne formatée via un seul tableau

var nextRow = Sheet_current.getLastRow() + 1; // Line 1 
var str = "1,2,3,4,5,6"; 
var temp = new Array(); //Line 3 
temp = str.split(","); 
var target = new Array(); //Line 5 
for (var i = 0; i < temp.length; i++) { 
    target.push([temp[i]]); 
} 
Sheet_current.getRange(Sheet_current.getLastRow() + 1, 1, target.length, target[0].length).setValues(target); //Line 9 

Résultats dans mon fichier tableur lors de l'exécution du code ci-dessus: result

J'utilise une chaîne en entrée, puis le convertir en un tableau temporaire (ligne 3).

Je continue de déclarer un tableau cible, pour transmettre les valeurs du tableau temporaire au tableau cible. (Lignes 5 à 7)

Enfin, j'utilise la matrice cible pour vider les valeurs dans ma feuille de calcul (verticalement, chaque mot du tableau cible correspond à une ligne dans le fichier tableur) (ligne 9).

Quelqu'un peut-il m'aider à optimiser le code que par le biais d'un seul tableau.

Sincèrement remercié.

Répondre

0

Si vous voulez simplement fournir le résultat sur différentes lignes et en commençant par la première colonne, vous pouvez utiliser le appendRow() method. Voici un exemple d'utilisation dans votre cas:

function myFunction() { 
    var Sheet_current = SpreadsheetApp.getActiveSheet(); 
    var nextRow = Sheet_current.getLastRow() + 1; // Line 1 
    var str = "1,2,3,4,5,6"; 
    var target = new Array(); //Line 3 
    target = str.split(","); 
    for (var i = 0; i < target.length; i++) { 
    Sheet_current.appendRow([target[i]]); 
    } 
} 

Ou vous pouvez simplement fait la modification que vous voulez sur votre premier tableau pour garder votre structure comme:

function myFunction2(){ 
    var Sheet_current = SpreadsheetApp.getActiveSheet(); 
    var nextRow = Sheet_current.getLastRow() + 1; 
    var str = "1,2,3,4,5,6"; 
    var temp = new Array(); 
    temp = str.split(","); 
    for (var i = 0; i < temp.length; i++) { 
    temp[i] = [temp[i]]; // To convert your Array[] on Array[][] 
    } 
    Sheet_current.getRange(Sheet_current.getLastRow() + 1, 1, temp.length, temp[0].length).setValues(temp); 
} 

Mais je ne recommande pas cet méthode, puisque c'est bon pour un petit programme, mais peut être difficile pour un plus grand.

+0

Vos commentaires sont les bienvenus - Pierre-Marie Richard. J'ai remplacé votre code dans mon projet GS. Presque le problème avec juste en utilisant un de mes tableaux originaux a été résolu, mais quand je vérifier à nouveau les journaux pour l'exécution, je vois que la méthode puis exécute dans l'intervalle de 0,3 - 0,5 seconde, alors que la méthode est entre 0,7 - 0,9 secondes. Je viens de courir le code de votre . En vous réécrivant, obtenez plus de votre part . Maintenant, je vais exécuter le deuxième extrait de code de vous. Encore une fois, je vous suis vraiment reconnaissant. Merci. –

+0

La méthode appendRow() est plus longue mais présente l'avantage d'être atomique, ce qui pourrait être utile. –

+0

Très bien, votre deuxième code fonctionne très bien dans mon projet. Mon problème a été résolu complètement. Peut-être envisagerai-je d'utiliser mon code original ou votre deuxième extrait de code, car ces deux scripts ont presque le même temps d'exécution lorsque j'essaie d'entrer une chaîne contenant 1000 éléments. Encore une fois, je vous suis très reconnaissant, merci beaucoup. –