Как зациклить данные и распечатать каждую итерацию в PDF в определенной папке Google Drive - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в GAS, поэтому, пожалуйста, потерпите меня.

Я хотел бы создать скрипт для Google Sheet, который будет циклически проходить через ряд значений, делать паузу при каждом значении ираспечатать конкретную вкладку из листа в определенном месте на Google Диске (создание новой папки с датой в родительской папке).Ниже приведено то, что у меня есть до сих пор, в котором реализованы циклы и печать, но я не могу понять, как заставить его сохранять файлы PDF в определенной папке.Благодарен за любую помощь!Спасибо.

Ссылка на фиктивную таблицу со скриптом здесь и целевую папку Google Диска здесь .

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 голосов
/ 12 октября 2018

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

  • Извлечь целевую папку, используя 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...