Я пробовал решения на Apps Script и Python.
Это был код appscript, который я пробовал
Код: Выделить всё
function downloadasPDF() {
// Get start time of execution
var startTime = new Date();
// Get user properties
var scriptProperties = PropertiesService.getScriptProperties();
var currentSheetIndex = Number(scriptProperties.getProperty('currentSheetIndex')) || 0;
// Delete existing trigger
// Defining variables
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = spreadSheet.getSheets();
var mainSheet = spreadSheet.getActiveSheet();
// Get or create folder
var parentFolder = DriveApp.getFolderById("MY FOLDER TO SAVE TO");
var options = {
method: 'GET',
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
},
muteHttpExceptions: true,
};
Logger.log(sheets.length)
var fileId = spreadSheet.getId();
// Loop through the sheets
for (var i=currentSheetIndex ; i < sheets.length; i++) {
Logger.log(i)
// Get current time and check if it exceeds 5 mins
var currentTime = new Date().getTime();
if (currentTime - startTime >= 4.75 * 60 * 1000) { // If reaching 4 minutes 45 seconds
ScriptApp.newTrigger('downloadasPDF')
.timeBased()
.after(1000) // Start the next execution after 1 second
.create();
break;
}
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", fileId);
var sheetName = sheets[i].getName();
var url_ext = 'exportFormat=pdf&format=pdf'
+ '&size=A4'
+ '&portrait=true'
+ '&fitp=true&source=labnol'
+ '&sheetnames=false&printtitle=false'
+ '&pagenumbers=false&gridlines=false'
+ '&gid=';
// Export as PDF
do var response = UrlFetchApp.fetch(url + url_ext + sheets[i].getSheetId(), options); while (response.getResponseCode() != 200);
var file = response.getBlob();
file.setName(sheetName + ".pdf");
parentFolder.createFile(file);
scriptProperties.setProperty('currentSheetIndex', i+1);
}
if (currentSheetIndex >= sheets.length) {
scriptProperties.deleteProperty('currentSheetIndex');
}
}
Для Python я не смог найти способ сделать это с помощью Gspread, поэтому я хотел преобразовать всю электронную таблицу в Excel, который затем можно было бы преобразовать в PDF с помощью другой библиотеки.
Код: Выделить всё
class GoogleSheetsClient:
def __init__(self, credentials_path: str):
self.credentials_path = credentials_path
self.gc = gspread.service_account(filename=Path(self.credentials_path))
def get_client(self):
return self.gc
def export_googlesheeets_as_excel_file(sheets_clients: GoogleSheetsClient, id: str):
client = sheets_clients.get_client()
path = os.path.join("pdf_outputs", "googlesheets.xlsx")
f = open(path, "wb")
f.write(
client.export(
id,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
)
)
f.close()
def export_as_pdf(base_file):
try:
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = False
wb = excel.Workbooks.Open(base_file)
sheets_in_workbook = wb.Worksheets
pdf_path = "C:/Path/To/PDF/Folder"
for i in len(sheets_in_workbook):
ws = wb.Worksheets[i]
ws.SaveAs(f"{pdf_path}/{i}.pdf", FileFormat=57)
except Exception as e:
print(e)
finally:
wb.Close()
excel.Quit()
Хотелось бы знать, есть ли какие-нибудь лучшие способы или библиотеки для выполнения этой задачи.
Подробнее здесь: https://stackoverflow.com/questions/785 ... preadsheet
Мобильная версия