Первый постер здесь. Я хотел бы получить некоторое представление о коде скрипта Google App, который, я думаю, можно немного улучшить.
Короче говоря.
У меня есть 2 таблицы Google Sheet
Электронная таблица «LOCALE» - список уникальных названий местоположений
A «FEED» электронная таблица - список описаний фотографий, в том числе местоположений. В этой таблице несколько раз указано одно и то же местоположение.
Обе эти таблицы имеют столбец « Местоположение », который ссылается друг на друга с ключом столбца.
Проблема, которую я хочу решить:
Когда Я изменяю название местоположения в электронной таблице «LOCALE», оно должно автоматически обновлять все названия местоположений в электронной таблице «FEED».
Способ решения этой проблемы:
Я использовал для l oop внутри для l oop для этого. Подведем итог:
- для каждой строки в " LOCALE " ...
- .. go через каждую строку в " FEED"...
- ... Если значение в столбце Key в листе FEED соответствует значению в столбце Key в LOCALE Sheet ...
- ... но значение в столбце Location в листе FEED не соответствует значение в столбце Местоположение в столбце LOCALE Лист ...
- ... обновить столбец Местоположение в FEED Лист со значением в столбце Расположение в Листе LOCALE .
Если вы еще не запутались, вот код, который я написал для это:
// for each row in the "Locale" sheet...
for(var L = LocationsRefValues.length-1;L>=0;L--) {
// for each row in the "Feed" sheet...
for(var F = FeedRefValues.length-1;F>=0;F--) {
if (FeedRefValues[F][97] == LocationsRefValues[L][17] &&
FeedRefValues[F][10] != LocationsRefValues[L][1]) {
FeedDataSheet.getRange(F+2,10+1).setValue(LocationsRefValues[L][1]);
}
}
}
Теперь этот код работает отлично, у меня не было никаких проблем. Тем не менее, я чувствую, что это немного неуклюже, так как требуется некоторое время, чтобы завершить редактирование. Я уверен, что есть более простой способ написать это и запустить этот код. Я слышал, что массивы могут решить эту ситуацию, но я не знаю, как go об этом. Следовательно, почему я ищу помощь. Может ли кто-нибудь помочь?
Имейте в виду, что я новичок в Google App Script, который получил этот код благодаря чистой тупой удаче, поэтому чем проще решение, тем лучше. Спасибо за любое рассмотрение моей проблемы заранее. Будем рады услышать от вас всех.
Это полная функция (после того, как я внес изменения, предложенные здесь.)
function ModeratorStatus() {
var Data = SpreadsheetApp.getActiveSpreadsheet(); // Local Spreadsheet
var ModeratorStatusDataSheet = Data.getSheetByName("The Status (Moderators)");
var ModeratorStatusRange = ModeratorStatusDataSheet.getRange("A2:C");
var ModeratorStatusRefValues = ModeratorStatusRange.getValues();
var ModeratorDataSheet = Data.getSheetByName("The Moderator_Numbers"); // DATA "Member" sheet
//var ModeratorRefValues = ModeratorDataSheet.getRange("A2:AD").getValues();
var ModeratorStatusObj = {};
for (var MOS = ModeratorStatusRefValues.length-1; MOS>=0; MOS--) {
ModeratorStatusObj[ModeratorStatusRefValues[MOS][2]] = ModeratorStatusRefValues[MOS][0];
}
var ModeratorValues = ModeratorDataSheet.getRange("A1:AD").getValues();
for (var MO = ModeratorValues.length-1; MO >=0; MO--) { // for each row in the "Moderator" sheet...
var ModeratorVal28 = ModeratorValues[MO][28];
if (ModeratorStatusObj[ModeratorVal28] != ModeratorValues[MO][1]) {
ModeratorValues[MO][1] = ModeratorStatusObj[ModeratorVal28];
}
}
var destinationRange = ModeratorDataSheet.getRange(1, 1, ModeratorValues.length, ModeratorValues[0].length);
destinationRange.setValues(ModeratorValues);
Я использовал код в другой функции в качестве теста. Чтобы упростить процесс
LOCALE = СОСТОЯНИЕ МОДЕРАТОРА
FEED = МОДЕРАТОР