Comment copier une ligne d'une feuille de calcul google vers une autre feuille de calcul google en utilisant googleapps script? [fermé]

Bonjour Je voulais copier une ligne particulière d'une feuille de calcul vers une autre feuille de calcul en utilisant googleapps script.Quelqu'un peut-il m'aider à obtenir la réponse à cette question.

13
demandé sur Wooble 2010-12-22 15:51:47

7 réponses

consultez la documentation ici:

http://code.google.com/googleapps/appsscript/service_spreadsheet.html

supposons que vous travaillez dans le tableur d'où vous copiez.

vous devez obtenir une poignée à la feuille de calcul courante et la feuille de calcul cible. Vous aurez besoin d'obtenir L'ID pour le tableur cible. Les détails sont dans le lien là-haut.

var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("abc1234567");

ensuite, nous devons choisir les feuilles particulières au sein de ces feuilles de calcul. Disons que votre ligne est sur la feuille nommée "New Stuff", et vous avez une feuille dans la feuille de calcul cible nommée "Archive".

var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");

maintenant, le concept que les tableurs googleapps utilisent sont des gammes. Une gamme est juste un morceau de cellules. Nous avons donc besoin de déterminer la gamme et la gamme. Disons que votre feuille a 7 colonnes et vous voulez la 10ème rangée.

var source_range = source_sheet.getRange("A10:G10");
var target_range = target_sheet.getRange("A1:G1");

nous allons donc prendre cette rangée et la mettre sur la première rangée de la feuille de la cible. Maintenant, pour la copie réelle:

source_range.copyTo(target_range);

et c'est fini!

maintenant, cela va toujours clouer la première ligne de la feuille de la cible. Il y a beaucoup de choses que tu peux faire pour arrêter ça. Au lieu d'utiliser toujours la première ligne, vous pouvez utiliser les méthodes de l'objet de la feuille pour trouver la dernière ligne, Ajouter un après, et puis l'utiliser comme votre gamme.

var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));

de cette façon à chaque fois que vous copiez une rangée, il est juste ajouté au bas de la feuille.

20
répondu Keith Twombley 2011-01-26 20:03:23

la méthode de copyTo est mal documentée parce qu'elle ne vous permet pas de copier le contenu d'une feuille à une feuille dans une autre feuille de calcul. Vous voudrez utiliser les getvalues et setvalues comme ci-dessous:

function CopyDataToNewFile() {
  var sss = SpreadsheetApp.openById('0AjN7uZG....'); // sss = source spreadsheet
  var ss = sss.getSheetByName('Monthly'); // ss = source sheet
  //Get full range of data
  var SRange = ss.getDataRange();
  //get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();
  //get the data values in range
  var SData = SRange.getValues();

  var tss = SpreadsheetApp.openById('8AjN7u....'); // tss = target spreadsheet
  var ts = tss.getSheetByName('RAWData'); // ts = target sheet
  //set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);

}  
13
répondu ubique 2012-07-26 19:31:45

j'ai rencontré ça aussi. J'ai réussi à trouver une solution de contournement qui copie tout d'une feuille à l'autre (à l'exception des images, des graphiques, des scripts et autres). Il copie des formules, des valeurs, formatant à coup sûr.

Fondamentalement, la solution est de

  • copier la feuille source dans la feuille de calcul cible comme une feuille source temporaire
  • copier les données de la feuille source temp à la feuille cible
  • supprimer la source temporaire feuille

Code:

var sss = SpreadsheetApp.openById(spreadsheet); // sss = source spreadsheet
var ss = sss.getSheetByName(sheet); // ss = source sheet
var ss_temp = ss.copyTo(targetsheet);
var tss = SpreadsheetApp.openById(spreadsheet); // tss = target spreadsheet
var ts = tss.getSheetByName(sheet); // ts = target sheet
var range2Copy = ss_temp.getRange(range);
range2Copy.copyTo(ts.getRange(range));
bss.setActiveSheet(ss_temp);
bss.deleteActiveSheet()

sur la base de ce qui précède, j'ai créé un tableur qui me permet de mettre à jour de nombreuses copies à partir d'un tableur maître. Avec environ 15 copies, il économise beaucoup d'actions de copier-coller.

6
répondu Stefan van Aalst 2017-11-03 01:05:09