first of all thank you very much for helping me to improve my codes in google sheet script
I wrote the below code with the help of sample code on the web in order to save some sheets on my spreadsheet as pdf file on my google drive folders. This spreadsheet shared also by me to some other users.
The below code adds a menu with a sub menu and when I click on the "PDF Store" sub menu a copy of the pdf file just in the "MAHSOL" or "MAVAD" sheet created and stored in the "ANBAR-PDF-1400" folder.
it works fine for me but when i share the same sheet for other users it doesn't work and the below message displayed:
Would you please let me know what correction should be done in code in order to do solve the problem
// By default, PDFs are saved in your Drive Root folder
// To save in the same folder as the spreadsheet, change the value to 'false' without the single quote pair
// You must have EDIT permission to the same folder
var saveToRootFolder = false
function onOpen() {
var submenu = [{name:" PDF Store ", functionName:"exportCurrentSheetAsPDF"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu('Store', submenu);
}
/*
function onOpen() {
SpreadsheetApp.getUi()
.createAddonMenu()
//.addItem('Export all sheets', 'exportAsPDF')
//.addItem('Export all sheets as separate files', 'exportAllSheetsAsSeparatePDFs')
.addItem('Export Sheet', 'exportCurrentSheetAsPDF')
//.addItem('Export selected area', 'exportPartAsPDF')
//.addItem('Export predefined area', 'exportNamedRangesAsPDF')
.addToUi()
}
*/
function _exportBlob(blob, fileName, spreadsheet) {
blob = blob.setName(fileName)
const folderName = `ANBAR-PDF-1400`;
var folder = saveToRootFolder ? DriveApp : DriveApp.getFoldersByName(folderName).next()
var pdfFile = folder.createFile(blob)
// Display a modal dialog box with custom HtmlService content.
const htmlOutput = HtmlService
.createHtmlOutput('<p>Click to open <a href="' + pdfFile.getUrl() + '" target="_blank">' + fileName + '</a></p>')
.setWidth(300)
.setHeight(80)
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful')
}
function exportAsPDF() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var blob = _getAsBlob(spreadsheet.getUrl())
_exportBlob(blob, spreadsheet.getName(), spreadsheet)
}
function _getAsBlob(url, sheet, range) {
var rangeParam = ''
var sheetParam = ''
if (range) {
rangeParam =
'&r1=' + (range.getRow() - 1)
+ '&r2=' + range.getLastRow()
+ '&c1=' + (range.getColumn() - 1)
+ '&c2=' + range.getLastColumn()
}
if (sheet) {
sheetParam = '&gid=' + sheet.getSheetId()
}
// A credit to
https://gist.github.com/Spencer-Easton/78f9867a691e549c9c70 // these parameters are reverse-engineered (not officially documented by Google)
// they may break overtime.
var exportUrl = url.replace(/\/edit.*$/, '')
+ '/export?exportFormat=pdf&format=pdf'
+ '&size=A4'
+ '&portrait=true'
+ '&fitw=true'
+ '&top_margin=0.5'
+ '&bottom_margin=0.5'
+ '&left_margin=0.7'
+ '&right_margin=0.7'
+ '&sheetnames=false&printtitle=false'
+ '&pagenum=CENTER' // change it to CENTER to print page numbers
+ '&gridlines=true'
+ '&fzr=TRUE'
+ sheetParam
+ rangeParam
Logger.log('exportUrl=' + exportUrl)
var response
var i = 0
for (; i < 5; i += 1) {
response = UrlFetchApp.fetch(exportUrl, {
muteHttpExceptions: true,
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
},
})
if (response.getResponseCode() === 429) {
// printing too fast, retrying
Utilities.sleep(3000)
} else {
break
}
}
if (i === 5) {
throw new Error('Printing failed. Too many sheets to print.')
}
return response.getBlob()
}
function exportCurrentSheetAsPDF() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var currentSheet = SpreadsheetApp.getActiveSheet()
if(currentSheet.getSheetName() == "MAHSOL")
{
var finv = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MAHSOL");
var blob = _getAsBlob(spreadsheet.getUrl(), currentSheet)
_exportBlob(blob, ' GS '+finv.getRange(6,11).getValue()+'-'+finv.getRange(5,3).getValue(), spreadsheet)
}
if(currentSheet.getSheetName() == "MAVAD")
{
var finv = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MAVAD");
var blob = _getAsBlob(spreadsheet.getUrl(), currentSheet)
_exportBlob(blob, ' GM '+finv.getRange(6,11).getValue()+'-'+finv.getRange(5,3).getValue(), spreadsheet)
}
}