正确保存为 PDF 以驱动 Google Sheet
Save correctly in PDF to Drive a Google Sheet
我正在 Sheet 下开发脚本,允许:
- 发送电子邮件,附上 sheet 的 pdf 副本
- 将此 sheet 以 pdf 格式保存在我的云端硬盘中(使用文件夹的 ID 定义)
我成功完成了脚本的第一部分,没有任何问题。对于第二部分,我也成功地做了这个备份。但是,此信息中的信息不适合我。事实上,图像没有在文件中传输(我有“cellimage”而是出现)并且数据与我的 Sheet 中存在的数据不对应。事实上,它们在我的 sheet 中逗号后四舍五入为 3 位数,而在备份中,没有四舍五入。
我希望拥有与电子邮件附件相同的文件。我苦苦寻找,但找不到将我的附件保存在驱动器中的代码。
Here 是文件的 link。
这是允许您发送邮件的函数:
function envoiMail() {
// Déclaration des constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
// Déclaration des variables
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var auditeurMail = Session.getActiveUser().getEmail().split('@');
var auditeurNomPrenom = auditeurMail[0].split('.');
var auditeurPrenom = majString(auditeurNomPrenom[0]);
var auditeurNom = majString(auditeurNomPrenom[1]);
var signature = auditeurPrenom+' '+auditeurNom;
var sujet = 'test ' + semaine + ' (' + annee +')';
var corpsDuMail = '<p>Bonjour,</p>'
+ '<p> Veuillez trouver ci-joint le test de la semaine ' + semaine + '-'+annee+'.</b></p><br>'
+ '</p>Bonne réception,</p>'
+ signature;
// Pièce jointe
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", classeur.getId());
var url_ext = 'exportFormat=pdf&format=pdf' + '&size=A4' + '&portrait=true' + '&fitw=true&source=labnol'
+ '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=false' + '&fzr=false' + '&gid=';
var token = ScriptApp.getOAuthToken();
var pdfMarge = UrlFetchApp.fetch(url + url_ext + feuille.getSheetId(),{headers : {
'Authorization' : 'Bearer ' + token }}).getBlob().setName("Marge_previsionnelle_S"+semaine+"_"+annee+".pdf");
// Fonction permettant d'envoyer le mail
MailApp.sendEmail("email@gmail.com", sujet, corpsDuMail, {
htmlBody : corpsDuMail,
attachments : [pdfMarge]
});
// Pop-up pour informer que l'envoi de mails s'est déroulé correctement
SpreadsheetApp.getUi().alert("Le mail a bien été envoyé aux personnes concernées !");
}
// Fonction permettant de mettre en majuscule la première lettre de la chaîne de caractère
function majString(a){
return (a+'').charAt(0).toUpperCase()+a.substr(1);
}
这是允许我在我的驱动器中存档我的 sheet 的功能:
function sauvegardeDrive() {
// Déclaration des variables et constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
var sheetName = "SYNTHESE";
var folderID = "1sRkfgLO8C4ABcrzPBonGPJm3emzWD3Ct";
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var pdfName = "test"+semaine+"_"+annee+".pdf";
//Copie de l'ensemble du Sheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("copieFichier", folder));
//Suppression des onglets inutiles
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}
var destSheet = destSpreadsheet.getSheets()[0];
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);
//Sauvegarde en pdf
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);
//Suppression du Sheet temporaire
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}
如果你有任何想法,我很感兴趣。
在此先感谢您,对于语法英语(或其他)的错误,我们深表歉意
注释掉(或删除)sauvegardeDrive()
函数中的这些行:
// var destSheet = destSpreadsheet.getSheets()[0];
// var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
// var sourcevalues = sourceRange.getValues();
// var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
// destRange.setValues(sourcevalues);
你不需要它们。您已经复制了sheet,您不需要再次复制sheet数据。
更新
如果您的 sheet 包含引用日期,如果您在删除另一个 sheet 的循环之前添加这两行,则可以将其转换为静态日期(在注释 '//Suppression des onglets inutiles'):
var range = destSpreadsheet.getSheetByName('SYNTHESE').getDataRange();
range.setValues(range.getDisplayValues());
更新 2
如果邮件脚本适合您,您可以只使用相同的代码部分来保存 sheet。试试这个 hew 函数 sauvegardeDrive()
:
function sauvegardeDrive() {
// Déclaration des variables et constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
var sheetName = "SYNTHESE";
var folderID = "1gZEWeG4XzZDuEqDDWKaMoVolMmeLWDRI";
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var pdfName = "test"+semaine+"_"+annee+".pdf";
// Pièce jointe -- this part is stealed from envoiMail() function
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", classeur.getId());
var url_ext = 'exportFormat=pdf&format=pdf' + '&size=A4' + '&portrait=true' + '&fitw=true&source=labnol'
+ '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=false' + '&fzr=false' + '&gid=';
var token = ScriptApp.getOAuthToken();
var pdfMarge = UrlFetchApp.fetch(url + url_ext + feuille.getSheetId(),{headers : {
'Authorization' : 'Bearer ' + token }}).getBlob().setName(pdfName);
folder.createFile(pdfMarge);
}
我正在 Sheet 下开发脚本,允许:
- 发送电子邮件,附上 sheet 的 pdf 副本
- 将此 sheet 以 pdf 格式保存在我的云端硬盘中(使用文件夹的 ID 定义)
我成功完成了脚本的第一部分,没有任何问题。对于第二部分,我也成功地做了这个备份。但是,此信息中的信息不适合我。事实上,图像没有在文件中传输(我有“cellimage”而是出现)并且数据与我的 Sheet 中存在的数据不对应。事实上,它们在我的 sheet 中逗号后四舍五入为 3 位数,而在备份中,没有四舍五入。
我希望拥有与电子邮件附件相同的文件。我苦苦寻找,但找不到将我的附件保存在驱动器中的代码。
Here 是文件的 link。
这是允许您发送邮件的函数:
function envoiMail() {
// Déclaration des constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
// Déclaration des variables
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var auditeurMail = Session.getActiveUser().getEmail().split('@');
var auditeurNomPrenom = auditeurMail[0].split('.');
var auditeurPrenom = majString(auditeurNomPrenom[0]);
var auditeurNom = majString(auditeurNomPrenom[1]);
var signature = auditeurPrenom+' '+auditeurNom;
var sujet = 'test ' + semaine + ' (' + annee +')';
var corpsDuMail = '<p>Bonjour,</p>'
+ '<p> Veuillez trouver ci-joint le test de la semaine ' + semaine + '-'+annee+'.</b></p><br>'
+ '</p>Bonne réception,</p>'
+ signature;
// Pièce jointe
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", classeur.getId());
var url_ext = 'exportFormat=pdf&format=pdf' + '&size=A4' + '&portrait=true' + '&fitw=true&source=labnol'
+ '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=false' + '&fzr=false' + '&gid=';
var token = ScriptApp.getOAuthToken();
var pdfMarge = UrlFetchApp.fetch(url + url_ext + feuille.getSheetId(),{headers : {
'Authorization' : 'Bearer ' + token }}).getBlob().setName("Marge_previsionnelle_S"+semaine+"_"+annee+".pdf");
// Fonction permettant d'envoyer le mail
MailApp.sendEmail("email@gmail.com", sujet, corpsDuMail, {
htmlBody : corpsDuMail,
attachments : [pdfMarge]
});
// Pop-up pour informer que l'envoi de mails s'est déroulé correctement
SpreadsheetApp.getUi().alert("Le mail a bien été envoyé aux personnes concernées !");
}
// Fonction permettant de mettre en majuscule la première lettre de la chaîne de caractère
function majString(a){
return (a+'').charAt(0).toUpperCase()+a.substr(1);
}
这是允许我在我的驱动器中存档我的 sheet 的功能:
function sauvegardeDrive() {
// Déclaration des variables et constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
var sheetName = "SYNTHESE";
var folderID = "1sRkfgLO8C4ABcrzPBonGPJm3emzWD3Ct";
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var pdfName = "test"+semaine+"_"+annee+".pdf";
//Copie de l'ensemble du Sheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("copieFichier", folder));
//Suppression des onglets inutiles
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}
var destSheet = destSpreadsheet.getSheets()[0];
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);
//Sauvegarde en pdf
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);
//Suppression du Sheet temporaire
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}
如果你有任何想法,我很感兴趣。
在此先感谢您,对于语法英语(或其他)的错误,我们深表歉意
注释掉(或删除)sauvegardeDrive()
函数中的这些行:
// var destSheet = destSpreadsheet.getSheets()[0];
// var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
// var sourcevalues = sourceRange.getValues();
// var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
// destRange.setValues(sourcevalues);
你不需要它们。您已经复制了sheet,您不需要再次复制sheet数据。
更新
如果您的 sheet 包含引用日期,如果您在删除另一个 sheet 的循环之前添加这两行,则可以将其转换为静态日期(在注释 '//Suppression des onglets inutiles'):
var range = destSpreadsheet.getSheetByName('SYNTHESE').getDataRange();
range.setValues(range.getDisplayValues());
更新 2
如果邮件脚本适合您,您可以只使用相同的代码部分来保存 sheet。试试这个 hew 函数 sauvegardeDrive()
:
function sauvegardeDrive() {
// Déclaration des variables et constantes
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('SYNTHESE');
var sheetName = "SYNTHESE";
var folderID = "1gZEWeG4XzZDuEqDDWKaMoVolMmeLWDRI";
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
var semaine = feuille.getRange('B5').getValue();
var annee = feuille.getRange('B4').getValue();
var pdfName = "test"+semaine+"_"+annee+".pdf";
// Pièce jointe -- this part is stealed from envoiMail() function
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", classeur.getId());
var url_ext = 'exportFormat=pdf&format=pdf' + '&size=A4' + '&portrait=true' + '&fitw=true&source=labnol'
+ '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=false' + '&fzr=false' + '&gid=';
var token = ScriptApp.getOAuthToken();
var pdfMarge = UrlFetchApp.fetch(url + url_ext + feuille.getSheetId(),{headers : {
'Authorization' : 'Bearer ' + token }}).getBlob().setName(pdfName);
folder.createFile(pdfMarge);
}