Я предполагаю, что вы хотите заполнить строку на основе идентификатора. Если мое предположение верно, вы можете использовать этот код сценария приложений:
function so62048323() {
var data = SpreadsheetApp.getActive().getDataRange().getValues();
var nameDictionary = new Object();
var addressDictionary = new Object();
var phoneDictionary = new Object();
for (var r = 1; r < data.length; r++) {
if (data[r][0] != '') {
if (data[r][1] != '') {
nameDictionary[data[r][0]] = data[r][1];
}
if (data[r][2] != '') {
addressDictionary[data[r][0]] = data[r][2];
}
if (data[r][3] != '') {
phoneDictionary[data[r][0]] = data[r][3];
}
}
}
for (var r = 1; r < data.length; r++) {
if (data[r][1] == '') {
data[r][1] = nameDictionary[data[r][0]];
}
if (data[r][2] == '') {
data[r][2] = addressDictionary[data[r][0]]
}
if (data[r][3] == '') {
data[r][3] = phoneDictionary[data[r][0]];
}
}
SpreadsheetApp.getActive().getDataRange().setValues(data)
}
Код инициирует чтение всей вашей таблицы с помощью SpreadsheetApp.getActive()
, Spreadsheet.getDataRange()
и Range.getValues()
. После этого он создаст три объекта в виде словарей.
После этого код будет перебирать каждую строку и записывать в словари каждое значение (имя, телефон и адрес), связанное с идентификатором. После этого код повторит операцию, но запишет значения. Наконец, все данные загружаются в лист с помощью Range.setValues (). Например, если у нас есть эта таблица:
И мы используем скрипт, мы получим это:
Обратите внимание, у некоторых ID нет телефонов; они остаются пустыми. Я понимаю, что вы можете использовать очень большую базу данных, поэтому я оптимизировал код, чтобы он работал максимально быстро, без учета размера данных. Кроме того, этот код будет работать, даже если строки не упорядочены. Не стесняйтесь задавать мне любые вопросы, если у вас есть сомнения.