Как создать документ Google для каждой строки электронной таблицы?

Эй! Это мой код, который использует последнюю строку электронной таблицы для создания документов Google, кроме того, он помещает ссылку на этот документ в исходную таблицу. Можно ли создать код, который делает это для всех строк на листе? У меня проблемы с использованием .range() для чтения строк по отдельности. Причина этого заключается в том, чтобы просто поддерживать и обновлять сгенерированные данные по сравнению с обновленными.

Заранее спасибо!

var app=SpreadsheetApp.openById("Google ID");
var sheet=app.getSheetByName('Respostas ao formulário 1')


function autoFillLastRow() {

  var range=sheet.getDataRange().getValues();
  var elem = range.pop();

  //e.values is an array of form values
  var timestamp = elem[0];

  //conversor de datas
  let data = new Date(timestamp);
  let dataFormatada = ((data.getDate() )) + "/" + ((data.getMonth() + 1)) + "/" +   data.getFullYear(); 

  var firstName = elem[1];
  var lastName = elem[2];
  var title = elem[3];
  
  //file is the template file, and you get it by ID
  var file = DriveApp.getFileById('Google Drive ID'); 
  
  //We can make a copy of the template, name it, and optionally tell it what folder to live in
  //file.makeCopy will return a Google Drive file object
  var folder = DriveApp.getFolderById('Google Drive ID')
  var copy = file.makeCopy(dataFormatada + ', ' + firstName, folder); 
  
  //Once we've got the new file created, we need to open it as a document by using its ID
  var doc = DocumentApp.openById(copy.getId()); 
  
  //Since everything we need to change is in the body, we need to get that
  var body = doc.getBody(); 
  
  //Then we call all of our replaceText methods
  body.replaceText('{{Nome}}', firstName); 
  body.replaceText('{{Sobrenome}}', lastName);  
  body.replaceText('{{Título}}', title); 
  
  //Lastly we save and close the document to persist our changes
  doc.saveAndClose(); 

  //edit cell
  var coluna = 5;
  var linha = sheet.getLastRow();
  var docId = doc.getId();
  sheet.getRange(linha, coluna,1,1).setValue("https://docs.google.com/document/d/" + docId);


  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создать документ для каждой строки электронной таблицы

   function createDocforEveryRowofSpreadsheet() {
      var ss = SpreadsheetApp.openById("Google ID");
      var sh = ss.getSheetByName('Respostas ao formulário 1')
      var file = DriveApp.getFileById('Google Drive ID');
      var folder = DriveApp.getFolderById('Google Drive ID')
      var [hA,...vs] = sh.getDataRange().getValues();
      vs.forEach((r,i) =>  {
        var ts = r[0];
        let data = new Date(ts);
        let dataFormatada = Utilities.formatDate(new Date(ts), Spreadsheet.getSpreadsheetTimeZone(), "dd/MM/yyyy")
        var firstName = r[1];
        var lastName = r[2];
        var title = r[3];
        var copy = file.makeCopy(dataFormatada + ', ' + firstName, folder);
        var doc = DocumentApp.openById(copy.getId());
        var body = doc.getBody();
        body.replaceText('{{Nome}}', firstName);
        body.replaceText('{{Sobrenome}}', lastName);
        body.replaceText('{{Título}}', title);
        doc.saveAndClose();
      })
    }

Во-первых, большое спасибо, так код становится бесконечно чище! Но моим препятствием является правильное видение этой переменной: var [hA,...vs] = sh.getDataRange().getValues(); И, к сожалению, код не может следовать этому синтаксису: vs.forEach((r,i) => ()) { Не могли бы вы мне помочь? (Я использую для этого скрипт приложений Google)

Marcelo Fritz 11.05.2022 19:42

Предположение для этой функции заключалось в том, что это была одна строка заголовка, которая помещается в hA, а остальные данные помещаются в двумерный массив vs, поэтому код, следующий за этой строкой, является просто методом массива forEach.

Cooper 11.05.2022 21:44

Другие вопросы по теме