значения ячеек автозаполнения на основе значений верхних ячеек в таблицах Google - PullRequest
0 голосов
/ 27 мая 2020

У меня есть данные о покупках, которые экспортированы из базы данных SQL. Формат вывода в таблицах Google выглядит следующим образом:

ID  name   address          phone       product name
1   Bob    2030 random road 6265609245  A
1                                       B
2   Peter  5453 golden drive            A
2                                       D
3   Jason  1 dna way                    C
4   James  sfo drive                    A
4                                       B
4                                       C

Я хотел бы знать, могу ли я автоматически заполнить пустые ячейки верхними значениями ячеек, если они имеют одинаковый идентификатор. Чтобы проиллюстрировать это, просмотрите желаемый формат вывода ниже:

ID  name   address          phone       product name
1   Bob    2030 random road 6265609245  A
1   Bob    2030 random road 6265609245  B
2   Peter  5453 golden drive            A
2   Peter  5453 golden drive            D
3   Jason  1 dna way                    C
4   James  sfo drive                    A
4   James  sfo drive                    B
4   James  sfo drive                    C

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 июня 2020

Я предполагаю, что вы хотите заполнить строку на основе идентификатора. Если мое предположение верно, вы можете использовать этот код сценария приложений:

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 ​​(). Например, если у нас есть эта таблица:

Initial spreadsheet

И мы используем скрипт, мы получим это:

Final step

Обратите внимание, у некоторых ID нет телефонов; они остаются пустыми. Я понимаю, что вы можете использовать очень большую базу данных, поэтому я оптимизировал код, чтобы он работал максимально быстро, без учета размера данных. Кроме того, этот код будет работать, даже если строки не упорядочены. Не стесняйтесь задавать мне любые вопросы, если у вас есть сомнения.

...