【问题标题】:How to Speed Up Function to Save 1 Sheet as PDF to Google Drive Folder in Google Sheets?如何加快将 1 张表格另存为 PDF 到 Google 表格中的 Google Drive 文件夹的功能?
【发布时间】:2018-03-23 16:46:18
【问题描述】:

下面的代码可以很好地仅将我的 Google 表格文件的“采购订单模板”表格以 PDF 格式保存到指定的 Google 云端硬盘文件夹“Purchase_Orders”。唯一的问题是该功能需要 10 多秒才能运行。代码中是否有可以压缩的东西来加快这个脚本的运行过程?

function checkSheet() {
  var sheetName = "POTemplate";
  var folderID = "Purchase_Orders";
  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
  var poNo = sourceSheet.getRange("G5").getValue();
  var shipTo = sourceSheet.getRange("E9").getValue();
  var pdfName = shipTo + " Purchase Order " + poNo;
  var folder = DriveApp.getFoldersByName(folderID);
  var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy(folder));
   var source = destSpreadsheet.getSheetByName(sheetName).getDataRange();
   source.copyTo(source, {contentsOnly: true});
  var sheets = destSpreadsheet.getSheets();
   for (i = 0; i < sheets.length; i++) {
   if (sheets[i].getSheetName() != sheetName){
     destSpreadsheet.deleteSheet(sheets[i])}}; 
  var theBlob = 
destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
  var newFile = folder.next().createFile(theBlob);
  DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
  var strUrl = newFile.getUrl()
  var html = HtmlService.createTemplateFromFile("NewTab");
  html.strUrl = strUrl
  SpreadsheetApp.getUi().showModelessDialog(html.evaluate(), 
"Congratulations!  "+ pdfName + " is now saved.")
}

【问题讨论】:

  • 您似乎正在克隆当前的电子表格,删除除一张以外的所有工作表,然后将其转换为 pdf,然后删除克隆的电子表格。为什么不直接隐藏当前电子表格中不想打印的每张工作表,然后将其转换为 PDF,然后再次取消隐藏工作表?
  • 希望尽可能多地消除手动步骤/鼠标点击。通过 Apps 脚本遵循您的建议可能是答案,但让我们的员工手动完成这些步骤可能会比现有代码慢。想法?
  • 您可以使用 Apps 脚本隐藏工作表:wb.getSheets().forEach(function (s) { if (s.getName() != "POTemplate" ) { s.hideSheet(); } ); /* make pdf from wb */ wb.getSheets().forEach(function (s) { s.unhideSheet(); });
  • 我发现getRangesetRange要花很多时间,尽量少,把数据保存在数组中而不是在电子表格中查找

标签: google-apps-script


【解决方案1】:

你的代码有我的执行记录。

看来File.makeCopy 需要 50% 的时间。还有Folder.createFile想要15%。

这意味着您的优化在未来将是最小的。

【讨论】:

  • 这如何随工作簿的大小和工作表数量而变化?此外,在说明无法优化执行之前,您应该将当前方法与我在对该问题的评论中提到的替代方法进行对比。
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多