Page 1 sur 1
Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 09:45
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 ...
Re: Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 12:54
par Lolowr
Yeps!
Pas de problème ! Voici comment imprimer une partie des onglets d'un classeur dans Google Sheets :
- Ouvrez le classeur Google Sheets contenant les onglets que vous souhaitez imprimer.
- 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.
- Cliquez sur "Fichier" dans la barre de menu en haut de l'écran.
- Sélectionnez "Imprimer" dans le menu déroulant.
- Dans la fenêtre "Imprimer", choisissez les paramètres d'impression souhaités, tels que l'imprimante, la mise en page, etc.
- Sous "Pages", choisissez l'option "Certaines feuilles".
- Cochez les cases à côté des onglets que vous souhaitez imprimer.
- 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.
Re: Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 12:59
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();
}
}
Re: Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 15:57
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 ...
Re: Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 16:46
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')
Re: Imprimer une partie des onglets d'un classeur
Publié : 23 mars 2023 19:24
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
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 :
- 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.
- 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 . Assurez-vous que la feuille de calcul existe toujours dans votre classeur.
- 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 . Pour résoudre ce problème, vous pouvez afficher la feuille de calcul en utilisant la méthode .[/b]
- 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.
@+
Re: Imprimer une partie des onglets d'un classeur
Publié : 24 mars 2023 17:33
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')
Re: Imprimer une partie des onglets d'un classeur
Publié : 11 avr. 2023 17:39
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 !
Re: Imprimer une partie des onglets d'un classeur
Publié : 12 avr. 2023 09:44
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