Вставить значение ответов формы в таблицу в Google DOC

Я работаю со скриптом Google Apps. Я хочу сделать обзор журнала активности, связанный с

  • Google-форма для сбора данных
  • Таблица Google для ввода данных
  • Google Doc для подведения итогов журнала

Мне нужен поток:

  • Пользователь заполняет форму Google
  • Введите записи в таблицу Google.
  • Входящие данные добавляются в таблицу в Google Doc, причем последний порядок ввода формы находится в строке номер 2 (после заголовка столбца).

Это мой сценарий:

   function onFormSubmit(e) {
     var docId    = '1b9oFJmKhcFpez4yIYmrsCG6zKOZh6_b-xxxxxxx';
     var formData = e.values;

     var columnMapping = {
        1: 0,  // Try using formData[1] for the 1st column
        2: 1,  // Try using formData[2] for the 2nd column
        3: 2,  // Try using formData[3] for the 3rd column
        };

     var doc  = DocumentApp.openById(docId);
     var body = doc.getBody();

     var table   = body.getTables()[0];
     var numCols = table.getRow(0).getNumCells();

     var newRow  = table.insertTableRow(1);
        for (var i = 0; i < numCols; i++) {
        newRow.insertTableCell(i, '');  // Insert blank cells
     }

    // Add data to all columns according to the mapping
     for (var sourceCol in columnMapping) {
     var targetCol = columnMapping[sourceCol];
       if (targetCol < numCols) {
     var dataToInsert = formData[sourceCol - 1];
       newRow.getCell(targetCol).setText(dataToInsert);
     }
    }
       doc.saveAndClose();
    };

К сожалению, мне не удалось получить данные из таблицы. Я могу перенести данные только из первого столбца электронной таблицы в таблицу в Google DOC, хотя я могу перейти к любому столбцу таблицы в Google DOC, но можно получить только одни данные.

Спасибо, если кто-нибудь захочет мне помочь.

Я протестировал сценарий, добавил key-value pair из 4: 3 для захвата COLUMN 4 в Документе Google, и он дал мне этот образец вывода, и я думаю, именно это вы и хотели бы сделать в ответ на ответ @Wicket. Можете ли вы рассказать подробнее I was unable to retrieve the data from the spreadsheet. I can only get data from the first column in the spreadsheet to the Table in Google DOC, even though I can move to any column in the Table in Google DOC, but only one data can be retrieved., потому что я думаю, что это та проблема, с которой вы столкнулись?

Saddles 28.08.2024 22:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ниже приведено предложение функции для добавления строки в таблицу Документов Google. Этот вызов функции вызывается из функции, которая получила отправленные формы значения из функции, считывающей значения строк из электронной таблицы.

/** Add here the target document ID*/
const docId = '';

function test_appendRowContent(){
  const rowContent = ['A', 'B', 'C', 'D'];
  appendRowContent(rowContent);
}

/**
 * @param {string[]} rowContent Content of the new row to append to the first table.
 * @param {number} [tableIndex] Table index. 
 * @param {number} [rowIndex] Template row index.
 */
function appendRowContent(rowContent, tableIndex = 0, rowIndex = 0) {
  const doc = DocumentApp.openById(docId);
  const body = doc.getBody();
  const table = body.getTables()[tableIndex];
  const templateRow = table.getChild(rowIndex);
  /**
   * Copy a row. 
   * It should have the same number of cells as the rowContent elements
   */
  const row = templateRow.asTableRow().copy();
  // Clear old content and add new content
  for(let i = 0; i < row.getNumCells(); i++){
    const cell = row.getChild(i);
    cell.setText(rowContent[i]);
  }
  // Append row to table
  table.appendTableRow(row);

}

Чтобы вставить строку, вы можете быстро адаптировать приведенный выше код, заменив table.appendTableRow(row); на table.insertTableRow(1, row).

Чтобы вызвать вышеуказанную функцию из обработчика функции для триггера отправки формы

function formSubmitHandler(e){
   appendRowContent(e.values);
}

Убедитесь, что в форме есть те же вопросы, что и в таблице.


Что касается рассматриваемого кода, то как функция, вызываемая триггером отправки в форме из электронной таблицы, e.values уже имеет данные, отправленные из формы, добавленные в электронную таблицу.

Оператор for-in — это запутанная попытка сделать что-то, что было бы проще сделать с помощью оператора for.

Стоит отметить, что метод DocumentApp.Document.saveAndClose() не требуется в конце функции, поскольку все изменения применяются после завершения выполнения.

Спасибо @Wicked за ваше предложение по моему вопросу. Но я хочу брать данные из электронной таблицы (лист ответов формы), и каждый раз, когда я заполняю форму, данные будут добавляться во второй строке (после заголовков столбцов), а старые данные будут сдвигаться вниз. .

PSAB Plalangan 28.08.2024 17:34

Вы можете вызвать эту функцию из функции onFormSubmit. Если вы не знаете, как читать данные из электронной таблицы, вам следует задать вопрос о том, как читать данные. Четко объясните, как вы определяете, какую строку следует скопировать в Документы Google или хотите ли вы добавить все строки.

Wicket 28.08.2024 17:38

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