В настоящее время я создаю веб-приложение, которое читает и пишет в Google Sheet. По сути, это приложение для форм, которое принимает входные данные из формы HTML, записывает их на лист, используя appendRow()
(и последующее использование getRange()
и setValue()
для добавления дополнительных данных в эту строку). Каждая строка представляет собой экземпляр заполняемой формы. См. Пример кода процесса записи.
/*
Function that is called in Index.html whenever the 'Next' button pressed. This
gets all inputs from HTML form and stores them in the spreadsheet.
Parameters:
inputArray: a 1x3 array which contains the owner, reference and type of scale.
*/
function addProjectInputs(inputArray) {
var sheetName = "Inputs";
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(sheetName);
Logger.log(sheet);
var d = new Date();
var tz = spreadsheet.getSpreadsheetTimeZone();
var d = [Utilities.formatDate(d,tz, "dd/MM/yyyy")];
var data = d.concat(inputArray);
Logger.log(data);
sheet.appendRow(data);
}
/* Function to append further data onto the row created from
addProjectInputs() */
function addFurtherInputs(idlerArray) {
var sheetName = "Inputs";
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(sheetName);
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn()-42;
var arrayEmpty = idlerArray.every(function(i) { return i === ''; });
Logger.log(arrayEmpty);
if (arrayEmpty !== true) {
for (i = 0; i < idlerArray.length; i++) {
var range3 = sheet.getRange(lastRow,lastColumn+1+i,1,1);
range3.setValue(idlerArray[i]);
}
}
}
Сводная страница приложения (страница 5, появляется после всех шагов записи), затем считывает эти данные (используя .getRange().getValues()
) и затем отображает их на странице .
Это прекрасно работает, когда на нем работает один пользователь - однако это приложение может использовать до 20 человек, потенциально одновременно. Это проблема. Например, если второй пользователь начнет использовать приложение, его данные начнут перезаписывать первого пользователя, добавляя новую строку, таким образом «архивируя» данные первого пользователя. Я сталкивался со следующими потенциальными решениями:
- Использование LockService для принудительного использования приложения только одним человеком за раз (не идеально, поскольку приложение будет использоваться для цитирования клиентов и доноров). не хочу заставлять пользователей ждать).
- Многопоточность
- Стеки
Я не уверен, как 2 или 3 будут работать, или даже возможно в GAS , Может ли кто-нибудь пролить свет на то, можно ли облегчить работу нескольких пользователей и как?
Заранее спасибо