Как удалить страницу из документа Google с помощью скрипта приложения - PullRequest
1 голос
/ 13 мая 2019

Я создал шаблон с несколькими страницами. После использования шаблона я хочу автоматически удалить все неиспользуемые страницы.

Вот как это работает. Я создал шаблон сертификата с 25 страницами с заполнителями для имени и других деталей. Каждая страница является сертификатом. После просмотра данных приведенный ниже код заменяет заполнители данными из таблиц Google. Как только это будет выполнено - я хочу удалить все лишние страницы в документе - например: если будут изменены только 5 страниц шаблона, я хочу удалить оставшиеся 20 страниц шаблона из документа.

Любые другие предложения по улучшению приветствуются, так как это мой первый App Script.

Дополнение для уточнения вопроса:

Скрипт берет данные из Google Sheet, который содержит сотни строк данных. Например, если необходимо создать 5 сертификатов, сценарий получает все данные и цикл и ищет определенный флаг (cert_data [i] [6] == 1), чтобы определить строки данных, которые должны использоваться для сертификата. , Как только флаг найден, данные в строке сохраняются в переменных и используются для замены заполнителей в файле шаблона. После замены данных во всех отмеченных строках - в этом примере заменяются только 5 страниц шаблона. Следовательно, в шаблоне будет использоваться баланс из 20 страниц, который не использовался - я хочу удалить эти страницы.

function createDocument() {

  //Setting ID for database
  var SPREADSHEET_ID = "doc ID"
  var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
  var worksheet = spreadsheet.getSheetByName("Sheet1");

  var cert_data = worksheet.getDataRange().getValues();  
  //Setting template ID
  var templateId = 'template ID goes here';

  //Make a copy of the template file
  var documentId = DriveApp.getFileById(templateId).makeCopy().getId();


  //Get the document body as a variable
  var body = DocumentApp.openById(documentId).getBody();

  //Foramt date
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "dd MMMM yyyy")

  var d = 0;


  //Looping through all the data that is in the Google Sheet
  for(var i = 1; i < cert_data.length ; i++){

    var curdata = cert_data[i][6];

    //Checking if the row data is to be used to create certificate
    if (cert_data[i][6] == 1) {
      var training_type = cert_data[i][12];
      var hours = cert_data[i][9];
      var user_name = cert_data[i][1];
      var NIC = cert_data[i][3];
      var date_completed = Utilities.formatDate(cert_data[i][8], "GMT+1", "dd MMMM yyyy");
      var company = cert_data[i][2];
      var cert_number = cert_data[i][0];
      var date_now = curDate;

      //Setting training names

      if (training_type == "01G") {training_type = "Basic First Aid" + String.fromCharCode(10) + "& Automated External" + String.fromCharCode(10) + "Defibrillator Certificate"; var file_name = 'AED Training';}

      if (training_type == "01B") {var file_name = 'Refresher Receipts';}

      d++;

      //Insert the data into the file
      body.replaceText('{training_type' + d + '}', training_type);
      body.replaceText('{hours' + d + '}', hours);
      body.replaceText('{name' + d + '}', user_name);
      body.replaceText('{NIC' + d + '}', NIC);
      body.replaceText('{date_completed' + d + '}', date_completed);
      body.replaceText('{company' + d + '}', company);
      body.replaceText('{cert_numb' + d + '}', cert_number);
      body.replaceText('{date_now' + d + '}', date_now);
    }
  }

    //d is the number of pages used from the template file
    //I want to delete all the balance pages (i.e. 25-d = x)
    //Rename the copied file
    DriveApp.getFileById(documentId).setName(file_name + ' - ' + company);

}

1 Ответ

0 голосов
/ 17 мая 2019
  • Каждая страница вашего Документа Google разделена разрывами страниц.
  • Вы хотите удалить несколько страниц Документа Google с последней страницы по порядку.
  • Количество страниц, которые вы хотите удалить, определяется вашим скриптом.

Если мое понимание верно, как насчет этого примера сценария? Порядок выполнения этого сценария следующий.

Поток:

  1. Получить абзацы в теле документа.
  2. Извлечение элементов в каждом абзаце. Разрыв страницы включен в абзац.
  3. Удалить элементы с последней страницы по порядку.
  4. Когда количество разрывов страниц совпадает с deletePages, сценарий останавливается.

С помощью этого потока можно удалить несколько страниц с последней страницы по порядку.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий скрипт и установите переменные deletePages и id. Затем запустите скрипт.

function myFunction() {
  var deletePages = 3; // Please set this.
  var id = "### documentId ###"; // Please set this.

  var paragraph = DocumentApp.openById(id).getBody().getParagraphs();
  var counter = 0;
  for (var i = paragraph.length - 1; i >= 0; i--) {
    for (var j = 0; j < paragraph[i].getNumChildren(); j++) 
      if (paragraph[i].getChild(j).getType() == DocumentApp.ElementType.PAGE_BREAK) counter++;
    paragraph[i].clear();
    if (counter == deletePages) break;
  }
}

Примечание:

  • Если вы хотите удалить 5 страниц с последней страницы, установите var deletePages = 5.
  • Также вы можете использовать эту функцию как myFunction(deletePages) в качестве метода. В это время удалите var deletePages = 3;.
  • Вы также можете использовать DocumentApp.getActiveDocument() вместо DocumentApp.openById(id).

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...