如何循环数据并在定义的Google云端硬盘文件夹中将每次迭代打印为PDF

时间:2018-10-11 22:21:53

标签: google-apps-script google-sheets

我是GAS的新手,所以请多多包涵。

我想为Google表格创建一个脚本,该脚本将循环显示一系列值,在每个值处暂停,然后将表格中的特定标签打印到Google云端硬盘中的定义位置(使用父文件夹中的日期)。到目前为止,下面是我可以实现的循环和打印功能,但是我无法弄清楚如何将PDF文件保存到特定文件夹。感谢您的帮助!谢谢。

使用脚本here链接到虚拟电子表格,并定位到Google云端硬盘文件夹here

function loop() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var validation_sheet = ss.getSheetByName('Validation');
  var lastRow = validation_sheet.getLastRow();
  var inputs = ss.getSheetByName('Validation').getRange('A2:A'+lastRow).getValues();
  var sheet2 = ss.getSheetByName('Loadout');
  var tab = ss.getSheetByName('Loadout');
  var formattedDate = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd hh:mm");

  //Create Folder for PDFs
  var fld = DriveApp.createFolder(formattedDate);
  fld.addFile(DriveApp.getFileById(ss.getId()));

  for (var i = 0; i < inputs.length; i++) {
    sheet2.getRange('A1').setValue(inputs[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(5000);

  //Print PDFs
  var name = tab.getRange(1, 1).getValue();
  fld.createFile(ss.getAs('application/pdf')).setName(name);
  }
  DriveApp.getRootFolder().removeFile(DriveApp.getFileById(ss.getId()));
}

1 个答案:

答案 0 :(得分:0)

  • 您要创建PDF文件以“定位Google云端硬盘文件夹”。 https://drive.google.com/drive/u/1/folders/1QmjXLyssyCGU16ApLQ4Anj_kir0uuQS8

如果我的理解是正确的,那么该修改如何?

修改点:

  • 使用DriveApp.getFolderById()检索目标文件夹。
  • 创建PDF文件后,它将创建文件到目标文件夹。

修改后的脚本:

function loop() {
  var targetFolderId = "1QmjXLyssyCGU16ApLQ4Anj_kir0uuQS8"; // Added
  var targetFolder = DriveApp.getFolderById(targetFolderId); // Added

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var validation_sheet = ss.getSheetByName('Validation');
  var lastRow = validation_sheet.getLastRow();
  var inputs = ss.getSheetByName('Validation').getRange('A2:A'+lastRow).getValues();
  var sheet2 = ss.getSheetByName('Loadout');
  var tab = ss.getSheetByName('Loadout');
//  var formattedDate = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd hh:mm"); // Removed

  //Create Folder for PDFs
//  var fld = DriveApp.createFolder(formattedDate); // Removed
//  fld.addFile(DriveApp.getFileById(ss.getId())); // Removed

  for (var i = 0; i < inputs.length; i++) {
    sheet2.getRange('A1').setValue(inputs[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(5000);

  //Print PDFs
  var name = tab.getRange(1, 1).getValue();
  targetFolder.createFile(ss.getAs('application/pdf')).setName(name); // Modified
  }
//  DriveApp.getRootFolder().removeFile(DriveApp.getFileById(ss.getId())); // Removed
}

注意:

  • 在您的脚本中,活动电子表格也被移动到创建的新文件夹中。关于这个,你想怎么办?

参考文献:

如果我误解了您的问题,请告诉我。我想修改它。

编辑:

  • 运行脚本时,首先,您要在目标文件夹中创建新文件夹。然后,您要在创建的文件夹中创建PDF文件。
  • 关于活动电子表格,什么也不做。

我像上面那样理解。如果我的理解是正确的,那么该修改如何?

修改后的脚本:

function loop() {
  var targetFolderId = "1QmjXLyssyCGU16ApLQ4Anj_kir0uuQS8"; // Added
  var targetFolder = DriveApp.getFolderById(targetFolderId); // Added

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var validation_sheet = ss.getSheetByName('Validation');
  var lastRow = validation_sheet.getLastRow();
  var inputs = ss.getSheetByName('Validation').getRange('A2:A'+lastRow).getValues();
  var sheet2 = ss.getSheetByName('Loadout');
  var tab = ss.getSheetByName('Loadout');
  var formattedDate = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd hh:mm");

  //Create Folder for PDFs
  var fld = targetFolder.createFolder(formattedDate); // Modified
//  fld.addFile(DriveApp.getFileById(ss.getId())); // Removed

  for (var i = 0; i < inputs.length; i++) {
    sheet2.getRange('A1').setValue(inputs[i][0]);
    SpreadsheetApp.flush();
    Utilities.sleep(5000);

    //Print PDFs
    var name = tab.getRange(1, 1).getValue();
    fld.createFile(ss.getAs('application/pdf')).setName(name); // Modified
  }
//  DriveApp.getRootFolder().removeFile(DriveApp.getFileById(ss.getId())); // Removed
}