我需要 2 个不同的按钮,以创建新文件夹并在该文件夹中创建新的 PDF

I need 2 different buttons, to create new folder and create a new PDF in that folder

我一直在努力构建特定的每周库存系统报告。所以为了给你一个基本的概述,我有一个主表,我想从中生成报告,由 UI 按钮触发。然而,第一步是为那一周创建一个文件夹来放置 PDF。我可以创建文件夹,并且可以在我的根 Google Drive 文件夹中生成 PDF,但我似乎无法移动PDF 之后的任何地方。我试图使用 .moveTo() 但我无法让它工作。有人有什么建议吗?

function onOpen(e) 
{
  SpreadsheetApp.getUi()
      .createMenu('Physical')
      .addItem('New folder','newFolder')
      .addItem('Generate PDF','generatePDF')
      .addToUi();
}

function newFolder(){
 var today = new Date();
  var week = Utilities.formatDate(today, "Europe/Amsterdam", "w"); //need to find a way to minus 1 for the current week

var spreadsheetId =  SpreadsheetApp.getActiveSpreadsheet().getId(); //time to create a new folder
    var spreadsheetFile =  DriveApp.getFileById(spreadsheetId);
    var folderId = spreadsheetFile.getParents().next().getId();
    var parFolder = DriveApp.getFolderById(folderId)
    var destFolder = parFolder.createFolder('Week ' + week);
}

function generatePDF(){
  var ss =  SpreadsheetApp.getActiveSpreadsheet();
  var speadsheetFile = ss.getId();
  var file = DriveApp.getFileById(speadsheetFile);
  var folderId = file.getParents().next().getId();
  var pdf = DriveApp.createFile(ss.getBlob())
  pdf.moveTo(folderId); //find way to move file either to destination folder or to parent folder
}

描述

这些类型的情况很难测试,因为这些情况是特定于 OP 提问者的。不过,我相信这会奏效。

使用 PropertyService 脚本属性,存储新创建的文件夹 ID,然后从脚本属性中获取该 ID 以移动文件。

请注意,如果周发生变化并且未创建新文件夹,我没有检查这种情况,pdf 将转到前一周的文件夹。

关于创建按钮并将函数链接到按钮,请参阅这篇文章Buttons in Google Sheets

脚本

function newFolder(){
  var today = new Date();
  var week = Utilities.formatDate(today, "Europe/Amsterdam", "w"); //need to find a way to minus 1 for the current week

  var spreadsheetId =  SpreadsheetApp.getActiveSpreadsheet().getId(); //time to create a new folder
  var spreadsheetFile =  DriveApp.getFileById(spreadsheetId);
  var folderId = spreadsheetFile.getParents().next().getId();
  var parFolder = DriveApp.getFolderById(folderId);
  var folderName = 'Week '+week;
  // check if folder already exists
  var subFolders = parFolder.getFoldersByName(folderName);
  var destFolder = null;
  if( subFolders.hasNext() ) {
    SpreadsheetApp.getUi().alert("Folder "+folderName+" already exists");
    destFolder = subFolders.next();
  }
  else {
    destFolder = parFolder.createFolder(folderName);
  }
  // store folder id to Script Properties
  var props = PropertiesService.getScriptProperties();
  props.setProperty("foldeId",destFolder.getId());
}

function generatePDF(){
  var ss =  SpreadsheetApp.getActiveSpreadsheet();
  // get folder id from Script Properties
  var folderId = PropertiesService.getScriptProperties("folderId");
  if( !folderId ) {
    SpreadsheetApp.getUi().alert("Property folderId not found");
    return;
  }
  var pdf = DriveApp.createFile(ss.getBlob())
  pdf.moveTo(folderId); //find way to move file either to destination folder or to parent folder
}

参考