Exportation d'une feuille dans une nouveau fichier

Bonjour,

Je souhaite créer une fonction qui créé un nouveau fichier puis qui copie-colle les données d'une autre feuille à l'intérieur .

Voilà ce que j'ai fait :

exportfolder

la variable ss est bien sûr défini dans d'autres parties de mon script, cependant je tombe sur cette erreur lors de de l'étape ou je copie mes données :

error

Auriez-vous des idées de corrections ou du modifications de mon code pour le faire fonctionner svp?

Bonjour,

As-tu dans l'erreur la ligne qui pose problème ?

+ au lieu de passer l'alerte en popup html à ta place je ferai :

var folders = rootFolder.getFoldersByName(fileName);
if (folders.hasNext()){
  var ui = SpreadsheetApp.getUi();
  ui.alert('Dossier déjà existant', ui.ButtonSet.OK);
  return;
}

Bonjour,

merci, Je viens de changer mon popup html du coup.

Et il s'agit de la dernière ligne :

newSheet.getRange(1, 1, data.getNumRows(), data.getNumColumns()).setValues(data.getValues());

qui me met l'erreur :

Exception: Service error: Spreadsheets.

J'ai aussi essayé un méthode avec des copyTo mais sans succès. En fait je cherche juste à copier les données de ma sheetRecep dans ma newSheet une fois qu'elle est créée, c'est pourtant tout simple mais je n'y arrive pas.

Plusieurs petites choses :

Stock tes datas directement quand tu déclare la variable :

var data = sheetRecep.getRange("A1:L+sheetRecep.getLastRow());

remplacé par :

var data = sheetRecep.getRange("A1:L+sheetRecep.getLastRow()).getValues()

Ensuite quand tu sélectionne ta nouvelle feuille essaye de remplacer :

var newSheet = newSpreadsheet.getSheets()[0];

par :

var newSheet = newSpreadsheet.getActiveSheet();

PS : quand tu utilises une variable/constante globale, comme ss dans ton cas, je te conseille de suivre l'usage de les écrire en MAJ afin d'en un coup d'oeil, savoir où est une variable/constante.

C'est fait, mais toujours la même erreur de service spreadsheets...

testt

j'ai essayé plusieurs versions de la dernière ligne même si elle m'a l'air correct

Le soucis est donc avant, newSheet est mal défini, ajoute un log qui teste si newSheet est bel et bien une feuille :

Logger.log(newSheet instanceof Sheet)

Merci, tu avais raison ma newSheet n'est pas définie, Cependant tout mon script fonctionne quand même (création du dossier et de la feuille avec le bon nom de feuille dans le drive). Il n'y a que le setValues qui ne fonctionne pas à la dernière ligne.

J'ai essayé de définir la variable plutôt comme ça, mais toujours erreur de spreadSheet not defined dans mon Logger.log(newSheet instanceof Sheet).

dzyu

A tu une idée de comment définir la variable ?

Peux tu partager ton fichier que je fasse des tests ?

Je te l'ai envoyé en MP.

Bonjour,

J'ai corrigé, voici un script fonctionnel :

const SS = SpreadsheetApp.getActiveSpreadsheet();
const UI = SpreadsheetApp.getUi();

function exportFolder() {
  const rootFolder = DriveApp.getFolderById("16PG1aN8YGu5CqdVq5j0lVYR30cgqmc8q");
  const sheetPT = SS.getSheetByName("Acceuil");
  const sheetRecep = SS.getSheetByName("Fiche à copier dans Drive");
  var numRows = sheetRecep.getLastRow();
  var pt = sheetPT.getRange("G12").getValue();
  var periodicite = sheetPT.getRange("L12").getValue();
  var fileName = pt + " périodicité : " + periodicite;
  var folders = rootFolder.getFoldersByName(fileName);
  if (folders.hasNext()) return UI.alert('Dossier déjà existant', UI.ButtonSet.OK);
  var newFolder = rootFolder.createFolder(fileName);
  var newSpreadsheet = SpreadsheetApp.create(fileName);
  var newSheet = newSpreadsheet.getActiveSheet();
  DriveApp.getFileById(newSpreadsheet.getId()).moveTo(newFolder);
  newSheet.getRange(1, 1, numRows, sheetRecep.getLastColumn()).setValues(sheetRecep.getDataRange().getValues());
}
image image

Alternative, tu semble voir exporter un bon, une solution peut être d'exporter un PDF :

const SS = SpreadsheetApp.getActiveSpreadsheet();
const UI = SpreadsheetApp.getUi();

function exportFolderAsPDF() {
  const rootFolder = DriveApp.getFolderById("16PG1aN8YGu5CqdVq5j0lVYR30cgqmc8q");
  const sheetPT = SS.getSheetByName("Acceuil");
  const sheetRecep = SS.getSheetByName("Fiche à copier dans Drive");
  var pt = sheetPT.getRange("G12").getValue();
  var periodicite = sheetPT.getRange("L12").getValue();
  var fileName = pt + " périodicité : " + periodicite;
  var folders = rootFolder.getFoldersByName(fileName);
  if (folders.hasNext()) return UI.alert('Dossier déjà existant', UI.ButtonSet.OK);
  var newFolder = rootFolder.createFolder(fileName);
  var ssUrl = SS.getUrl();
  var sheetId= sheetRecep.getSheetId();
  var url = ssUrl.replace(/\/edit.*$/,'')
      + '/export?exportformat=pdf&format=pdf'
      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=0.50'
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf').setName(fileName);
  var file = DriveApp.createFile(pdf);
  file.moveTo(newFolder);
}
Rechercher des sujets similaires à "exportation feuille nouveau fichier"