Imprimer une partie des onglets d'un classeur Le sujet est résolu

Avatar de l’utilisateur
gelal
Messages : 12
Inscription : 26 sept. 2022 11:16
A remercié : 2 fois

Imprimer une partie des onglets d'un classeur

Message par gelal »

Yeps !
J'ai un classeur qui compte environ 80 feuilles (onglets). Ceux-ci sont créés à partir d'une liste et d'un script.
Comment pourrais-je faire pour imprimer seulement 74 de ces feuilles ? Sauf erreur de ma part, il n'y a pas de commande apps script qui permet de gérer les impressions ...
Merci d'avance ...
Image
Avatar de l’utilisateur
Lolowr
Messages : 18
Inscription : 29 nov. 2022 17:16
A remercié : 8 fois

Re: Imprimer une partie des onglets d'un classeur

Message par Lolowr »

Yeps!
Pas de problème ! Voici comment imprimer une partie des onglets d'un classeur dans Google Sheets :
  1. Ouvrez le classeur Google Sheets contenant les onglets que vous souhaitez imprimer.
  2. Cliquez sur l'onglet que vous souhaitez imprimer. Si vous souhaitez imprimer plusieurs onglets, maintenez la touche "Ctrl" (Windows) ou "Cmd" (Mac) enfoncée tout en cliquant sur les onglets.
  3. Cliquez sur "Fichier" dans la barre de menu en haut de l'écran.
  4. Sélectionnez "Imprimer" dans le menu déroulant.
  5. Dans la fenêtre "Imprimer", choisissez les paramètres d'impression souhaités, tels que l'imprimante, la mise en page, etc.
  6. Sous "Pages", choisissez l'option "Certaines feuilles".
  7. Cochez les cases à côté des onglets que vous souhaitez imprimer.
  8. Cliquez sur le bouton "Imprimer" pour lancer l'impression.
Voilà, vous devriez maintenant avoir imprimé la partie des onglets souhaités dans votre classeur Google Sheets.
Avatar de l’utilisateur
Lolowr
Messages : 18
Inscription : 29 nov. 2022 17:16
A remercié : 8 fois

Re: Imprimer une partie des onglets d'un classeur

Message par Lolowr »

Tu peux adapter ce script a tes besoins .
Tiens moi au courant si cela fonctionne.
@+
Laurent

function imprimerOnglets() {
  var onglets = ['Onglet1', 'Onglet2', 'Onglet3']; // Remplacez ces noms d'onglets par ceux que vous voulez imprimer.
  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  for (var i = 0; i < onglets.length; i++) {
    var sheet = spreadsheet.getSheetByName(onglets);
    sheet.showSheet();
  }
  
  SpreadsheetApp.flush();
  var printOptions = new Object();
  printOptions['printArea'] = spreadsheet.getActiveSheet().getDataRange();
  printOptions['scale'] = 1;
  printOptions['fitToWidth'] = 1;
  printOptions['fitToHeight'] = 0;
  printOptions['gridlines'] = true;
  printOptions['sheetIds'] = [];
  
  for (var i = 0; i < onglets.length; i++) {
    var sheet = spreadsheet.getSheetByName(onglets);
    printOptions['sheetIds'].push(sheet.getSheetId());
  }
  
  var printer = SpreadsheetApp.getActiveSpreadsheet().getPrintService().getPrinters()[0];
  var printJob = printer.createJob();
  printJob.setPrintSettings(printOptions);
  printJob.print();
  
  for (var i = 0; i < onglets.length; i++) {
    var sheet = spreadsheet.getSheetByName(onglets);
    sheet.hideSheet();
  }
}


 
Avatar de l’utilisateur
gelal
Messages : 12
Inscription : 26 sept. 2022 11:16
A remercié : 2 fois

Re: Imprimer une partie des onglets d'un classeur

Message par gelal »

Merci, je vais plutôt tester le script, car le nombre d'onglets est environ 80 ... Tandis que je pourrais alimenter la table des noms d'onglets avec une boucle.
Je te tiens au courant ...
Avatar de l’utilisateur
gelal
Messages : 12
Inscription : 26 sept. 2022 11:16
A remercié : 2 fois

Re: Imprimer une partie des onglets d'un classeur

Message par gelal »

Au premier essai, en ayant indiqué 3 noms d'onglets dans le tableau "onglets", j'ai ce message d'erreur : 

TypeError : Cannot read properties of null (reading 'showSheet')
Avatar de l’utilisateur
Lolowr
Messages : 18
Inscription : 29 nov. 2022 17:16
A remercié : 8 fois

Re: Imprimer une partie des onglets d'un classeur

Message par Lolowr »

Verifier bien l orthographe et Attention à la casse (respectez les minuscules MAJUSCULES .

j'ai recherché avec Chat GPT l'erreur et voici :

L'erreur "TypeError: Cannot read properties of null (reading 'showSheet')" est générée lorsque vous essayez d'accéder à une feuille de calcul qui n'existe pas dans votre classeur Google Sheets. Plus précisément, cela se produit lorsque vous appelez la méthode

Code : Tout sélectionner

showSheet()
sur une feuille de calcul qui n'est pas trouvée.Voici quelques raisons courantes pour lesquelles cela peut se produire, ainsi que des solutions possibles :
  1. Le nom de la feuille de calcul est mal orthographié ou incorrect - Vérifiez que le nom de la feuille de calcul est correctement orthographié et qu'il correspond exactement à ce qui est indiqué dans votre code.
  2. La feuille de calcul a été supprimée - Si la feuille de calcul a été supprimée, vous ne pourrez pas y accéder en appelant la méthode

    Code : Tout sélectionner

    showSheet()
    . Assurez-vous que la feuille de calcul existe toujours dans votre classeur.
  3. La feuille de calcul est cachée - Si la feuille de calcul est cachée, vous ne pourrez pas y accéder en appelant la méthode

    Code : Tout sélectionner

    showSheet()
    . Pour résoudre ce problème, vous pouvez afficher la feuille de calcul en utilisant la méthode

    Code : Tout sélectionner

    showSheet()
    .[/b]
  4. Il y a plusieurs feuilles de calcul avec le même nom - Si plusieurs feuilles de calcul ont le même nom, votre code peut ne pas être en mesure de déterminer laquelle afficher.

    @+
Avatar de l’utilisateur
gelal
Messages : 12
Inscription : 26 sept. 2022 11:16
A remercié : 2 fois

Re: Imprimer une partie des onglets d'un classeur

Message par gelal »

Yeps,
J'ai refait l'essai en faisant un copier/coller des noms de feuilles et l'erreur persiste.
Si je mets en commentaire la partie "showSheet" et la partie "hideSheet", j'ai alors le message suivant :
TypeError : Cannot read properties of null (reading 'getSheetId')
 
Avatar de l’utilisateur
NC_Quentin

Coach Numericoach
Invétéré
Messages : 33
Inscription : 10 oct. 2022 09:06
A remercié : 1 fois
Remercié : 11 fois

Re: Imprimer une partie des onglets d'un classeur

Message par NC_Quentin »

Bonjour !

Je suis désolé d’arriver si tard pour le dire, mais le code qui a été fourni un peu plus haut est… eh bien, faux. Au sens où il ne fonctionnera jamais. Ma présomption est que ce code a été créé avec ChatGPT, or ChatGPT est… disons, loin d’être parfait.

Il n’existe pas de moyen depuis Apps Script de déclencher une impression sur votre imprimante, sauf si votre imprimante est capable d’imprimer depuis un mail, auquel cas vous pouvez lui envoyer un mail pour déclencher l’impression en question. Fut un temps, il existait Google Cloud Print, mais le service a disparu fin 2020.

Le mieux que l’on puisse faire, c’est adapter ce code fourni directement par Google comme code d’exemple pour transformer une liste d’onglets en pdfs. C’est assez simple et ça donne quelque chose comme ça (en imaginant que le code Apps Script soit mis dans Extensions > Apps Script et non pas en script stand-alone) :

Code : Tout sélectionner

const SHEET_NAMES = [
  "1",
  "2",
  "4"
  ];
const EXTRACT_FOLDER_ID = "123exemple456identifiant";
/**
 * Take all the sheets from SHEET_NAMES and export them to PDF to the folder with the id EXTRACT_FOLDER_ID
 */
function printSheets() {
  let folder = DriveApp.getFolderById(EXTRACT_FOLDER_ID);
  let ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
  for(let sheetName of SHEET_NAMES){
    let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    Logger.log(sheetName);
    Logger.log(sheet);
    if(sheet){
      createPDF(ssId, sheet, sheetName, folder);
    }
  }
}
/**
 * Creates a PDF for the customer given sheet.
 * @param {string} ssId - Id of the Google Spreadsheet
 * @param {object} sheet - Sheet to be converted as PDF
 * @param {string} pdfName - File name of the PDF being created
 * @return {file object} PDF file as a blob
 */
function createPDF(ssId, sheet, pdfName, folder) {
  const fr = 0, fc = 0, lc = 9, lr = 27;
  const url = "https://docs.google.com/spreadsheets/d/" + ssId + "/export" +
    "?format=pdf&" +
    "size=7&" +
    "fzr=true&" +
    "portrait=true&" +
    "fitw=true&" +
    "gridlines=false&" +
    "printtitle=false&" +
    "top_margin=0.5&" +
    "bottom_margin=0.25&" +
    "left_margin=0.5&" +
    "right_margin=0.5&" +
    "sheetnames=false&" +
    "pagenum=UNDEFINED&" +
    "attachment=true&" +
    "gid=" + sheet.getSheetId() + '&' +
    "r1=" + fr + "&c1=" + fc + "&r2=" + lr + "&c2=" + lc;
  const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } };
  const blob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName + '.pdf');
  const pdfFile = folder.createFile(blob);
  Logger.log(pdfFile);
  return pdfFile;
}
Il y a un petit temps d’exécution (les pdfs arrivent parfois après quelques minutes dans le dossier en question), mais c’est fonctionnel.

En espérant que ça pourra être utile !
Avatar de l’utilisateur
gelal
Messages : 12
Inscription : 26 sept. 2022 11:16
A remercié : 2 fois

Re: Imprimer une partie des onglets d'un classeur

Message par gelal »

Bonjour,
Merci pour ta réponse qui conforte le fait que l'on ne trouve pas trace d'informations de gestion d'impression par app script dans les recherches.
Depuis, j'ai effectivement opté pour un export pdf qui lui, fonctionne plutôt bien. Même si, comme tu le dis, il y a parfois un temps d'attente pour voir les fichiers dans le répertoire ad hoc.
Merci pour ton aide ;-)
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous