На моем веб-сайте есть несколько форм 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
Форум по Javascript
1736275038
Anonymous
На моем веб-сайте есть несколько форм 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}".`);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79337018/how-to-stop-duplicating-form-submissions-on-a-master-database-google-sheet-apps[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия