Imprimer une partie des onglets d'un classeur Le sujet est résolu
Imprimer une partie des onglets d'un classeur
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 ...
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
Yeps!
Pas de problème ! Voici comment imprimer une partie des onglets d'un classeur dans Google Sheets :
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.
Re: Imprimer une partie des onglets d'un classeur
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();
}
}
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
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 ...
Je te tiens au courant ...
Re: Imprimer une partie des onglets d'un classeur
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')
TypeError : Cannot read properties of null (reading 'showSheet')
Re: Imprimer une partie des onglets d'un classeur
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 :
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()
- 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.
Code : Tout sélectionner
showSheet()
- 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
Code : Tout sélectionner
showSheet()
.[/b]Code : Tout sélectionner
showSheet()
- 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
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')
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')
- NC_Quentin
- Invétéré
- Messages : 36
- Inscription : 10 oct. 2022 09:06
- A remercié : 1 fois
- Remercié : 12 fois
Re: Imprimer une partie des onglets d'un classeur
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) :
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 !
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;
}
En espérant que ça pourra être utile !
Re: Imprimer une partie des onglets d'un classeur
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
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
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