Я работаю со скриптом Google Apps. Я хочу сделать обзор журнала активности, связанный с
Мне нужен поток:
Это мой сценарий:
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, но можно получить только одни данные.
Спасибо, если кто-нибудь захочет мне помочь.
Ниже приведено предложение функции для добавления строки в таблицу Документов 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 за ваше предложение по моему вопросу. Но я хочу брать данные из электронной таблицы (лист ответов формы), и каждый раз, когда я заполняю форму, данные будут добавляться во второй строке (после заголовков столбцов), а старые данные будут сдвигаться вниз. .
Вы можете вызвать эту функцию из функции onFormSubmit. Если вы не знаете, как читать данные из электронной таблицы, вам следует задать вопрос о том, как читать данные. Четко объясните, как вы определяете, какую строку следует скопировать в Документы Google или хотите ли вы добавить все строки.
Я протестировал сценарий, добавил
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.
, потому что я думаю, что это та проблема, с которой вы столкнулись?