На моем веб-сайте есть несколько форм Google, которые заполняют клиенты. Все ответы на эти разные формы связаны с одной электронной таблицей. Затем я использовал APPSCRIPT, чтобы объединить все ответы на одной вкладке под названием «MasterSheet».
Моя проблема заключается в следующем. Я использую временные метки в качестве своего уникального идентификатора, чтобы сценарий знал, когда есть новая отправка, и ТОЛЬКО добавлял новую отправку с каждой отдельной вкладки в мою главную таблицу. НО если одновременно поступило 2 заявки, сценарий подхватил только одну. Поэтому я скорректировал его, пытаясь собрать все новые материалы, но теперь скрипт дублирует данные при появлении нового представления.
Я думаю, проблема в моем
константные данные
ЗДЕСЬ ПОЛНЫЙ СКРИПТ:
const data = activeSheet.getRange(2, 1, lastRow - 1, activeSheet.getLastColumn()).getValues();
const newData = data.filter(row => !masterTimestampsAndEmails.has(row[0] + row[1])); // Check Timestamp + Email combo
if (newData.length > 0) {
// Add the tab name to the "GUIDE REQUESTED" column
const headers = masterSheet.getRange(1, 1, 1, masterSheet.getLastColumn()).getValues()[0];
const guideRequestedIndex = headers.indexOf('GUIDE REQUESTED (DO NOT CHANGE)');
if (guideRequestedIndex === -1) {
throw new Error('GUIDE REQUESTED column not found in the MasterSheet.');
}
newData.forEach(row => {
row[guideRequestedIndex] = activeSheetName; // Set the GUIDE REQUESTED column to the sheet name
});
// Append only new rows to the MasterSheet
masterSheet.getRange(masterSheet.getLastRow() + 1, 1, newData.length, newData[0].length).setValues(newData);
Logger.log(`Appended ${newData.length} rows from sheet "${activeSheetName}" to MasterSheet.`);
} else {
Logger.log(`No new data to append from sheet "${activeSheetName}".`);
}
Это был мой оригинальный сценарий, который работал КРАСИВО, но, к сожалению, при отправке двух форм
const data = activeSheet.getRange(lastRow, 1, 1, activeSheet.getLastColumn()).getValues();
const newData = data.filter(row => !masterTimestamps.has(row[0].toString().trim()));
if (newData.length > 0) {
newData.forEach(row => {
// Update state/province based on country
const country = row[5]; // Country column
const stateIndex = 6; // "U.S. State / Canada Province" column
if (country !== 'US - United States of America (the)' && country !== 'CA - Canada') {
row[stateIndex] = 'Not applicable (located outside of the United States and Canada)';
}
// Set the GUIDE REQUESTED column to the active sheet name
const guideRequestedIndex = 14; // Adjust if the column position changes
row[guideRequestedIndex] = activeSheetName;
});
masterSheet.getRange(masterSheet.getLastRow() + 1, 1, newData.length, newData[0].length).setValues(newData);
Logger.log(`Appended 1 row from sheet "${activeSheetName}" to MasterSheet.`);
} else {
Logger.log(`No new data to append from sheet "${activeSheetName}".`);
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... sheet-apps
Как остановить дублирование отправки форм в основной базе данных Google Sheet/APPSCRIPT и придатке данных ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение