web-dev-qa-db-fra.com

Comment faire une copie de la feuille de calcul et l'enregistrer dans un dossier particulier?

Je travaille avec Google App Script. J'essaie de:

  1. Faire une copie d'une feuille de calcul
  2. Donnez à la copie un nom de fichier particulier et
  3. Enregistrez-le dans un dossier particulier.

Il me semble que le code ci-dessous devrait fonctionner, mais ce n'est pas le cas. Il accomplit les tâches 1 et 3 - c'est-à-dire qu'il fait une copie et enregistre la copie dans mon dossier souhaité. Cependant, il n'enregistre pas le fichier avec le nom de fichier que je spécifie. Au lieu de cela, il l'enregistre en tant que "Copie de [nom de fichier de la feuille de calcul d'origine]". Pour ce faire, j'utilise File#makeCopy

(Remarque: je sais que cette question a déjà reçu une réponse, mais je pense qu'elle n'a pas été répondue depuis la suppression de Google du service DocList.)

Quand j'ai fait ce MCVE simplifié, j'ai constaté qu'il fonctionne comme prévu:

function saveAsSpreadsheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy("desired file name", destFolder);
} //END function saveAsSpreadsheet

Cependant, mon code d'origine ne fonctionne pas - le nom de la copie est incorrect:

function saveAsSpreadsheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var buildingNameAddress = sheet.getRangeByName('buildingNameAddress').getValue();
  Logger.log(buildingNameAddress); //Logs correct string
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy(buildingNameAddress, destFolder);
}
14
Jeff

Voici le code corrigé de votre fonction qui a fonctionné pour moi. Vous ne définissiez pas la plage nommée pour laquelle j'ai utilisé la méthode setNamedRange et lui ai donné un nom. Cela et en changeant le nom de variable auquel vous obteniez les valeurs de plage en TestRange. De plus, getValue() ne vous procurerait qu'une seule valeur alors que vous aviez besoin d'une plage de valeurs, donc utilisez getValues() à la place. Mais le reste du code était bien et fonctionnait parfaitement.

function saveAsSpreadsheet(){ 
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange('Sheet1!A1:B3');
  sheet.setNamedRange('buildingNameAddress', range);
  var TestRange = sheet.getRangeByName('buildingNameAddress').getValues(); 
  Logger.log(TestRange); 
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxx"); 
  DriveApp.getFileById(sheet.getId()).makeCopy("Test File", destFolder); 
}
13
pointNclick