Automati c заметки в выпадающем меню Google Sheets - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть таблица Google Sheets. На рабочем листе «Main» у меня есть раскрывающийся список в столбце A. Информация в этом раскрывающемся списке извлекается из столбца A рабочего листа «Places».

В целях экономии места на рабочем листе «Main» Я сокращаю названия мест до 2 или 3 буквенных сокращений, чтобы в качестве примера Pontypandy стал PP. Есть ли способ, когда я выбираю «PP» в раскрывающемся списке «основного» листа, к нему добавляется автоматическая заметка c, которая будет читать «Pontypandy» и будет видна любому, кто наведет курсор на эта конкретная ячейка?

Дополнительная информация:

Ниже приведены мои последние попытки написания сценария, в который вы любезно помогли включить последние внесенные вами изменения, которые находятся в строках 3 и 4. Пожалуйста, не беспокойтесь из-за различий в именах листов, теперь я перешел на свою настоящую электронную таблицу, ранее работавшую в тестовой среде, поэтому теперь я использую правильные имена листов как описано в сценарии ниже.

function onEdit(e) {
  const range = e.range;
  const sheetNames = ["01", "02", "03", "04", "05", "06", "07", "08",,,];
      if (sheetNames.some(s => range.getSheet().getsheetName() == s) && range.columnStart == 5) {
  const object = {
      AVD: "AV Dawson Middlesbrough",
      BA: "Basford Hall, Crewe (FLR)",
      BH: "Barrow Hill Roundhouse",
      BKR: "Bo'ness & Kinneil Railway",
      BN: "Bounds Green (LNER)",
      CD: "Crewe Diesel (Locomotive Storage Ltd)",
      CE: "Crewe Electric TMD",
      CF: "Cardiff Canton",
      CFT: "Cardiff Tidal",
      ChaR: "Chasewater Railway",
      CPRR: "Chinoor & Princes Risborough Railway",
      CZ: "Central Rivers (Bombardier)",
      DRM: "Doncaster Royal Mail Terminal",
      EH: "Eastleigh (Arriva Traincare)",
      EHY: "Eastleigh East Yard",
      ELY: "Ely Papworth Sidings",
      EML: "EMD Longport",
      FX: "Felixstowe Docks",
      HT: "Heaton, Newcastle",
      IL: "Ilford (Greater Anglia)",
      LA: "Laira (Great Western)",
      LB: "Loughborough Brush Traction",
      LD: "Leeds Midland Road (FLR)",
      LE: "Landore (Great Western)",
      LM: "Long Marston",
      LR: "Leicester L.I.P (UKRL)",
      NA: "Newton Aycliffe (Hitachi)",
      NC: "Norwich Crown Point",
      PG: "Peterborough (GBRf)",
      PM: "Bristol St Phillips Marsh",
      RR: "Roberts Road, Doncaster",
      SZ: "Southampton Maritime (FLR)",
      TO: "Toton (DBC)",
      TY: "Tyne Yard",
      WB: "Wembley (Alstom)",
      WEN: "Wensleydale Railway",
      WI: "Wishaw",
      ZB: "Doncaster Wabtec",
  };
   const v = range.getValue();
      range.setNote(v in object ? object[v] : "");
    }     

}

Мое требование не изменилось. Я по-прежнему требую, чтобы при выборе элемента в раскрывающемся списке в column E появлялась заметка с дополнительными подробностями, касающимися выбора, который я сделал, согласно списку объектов в приведенном выше сценарии. Таким образом, для пары примеров, если я выбираю «AVD» из выпадающего меню, мне нужно, чтобы появилась заметка с надписью «AV Dawson Middlesbrough», а если я выбираю «BA», мне нужно, чтобы появлялась заметка с надписью «Basford Hall, Crewe (FLR)». ".

Это работало нормально, когда мы пробовали его только на одном листе, но я изо всех сил пытаюсь заставить работать вышеуказанный скрипт, чтобы он работал на всех листах, так как я получаю следующее сообщение об ошибке, когда я попытайтесь сохранить его в текущем виде:

Синтаксическая ошибка. (строка 4, файл «Заметки депо») Уволить

1 Ответ

2 голосов
/ 08 апреля 2020

Вопрос 1:

  • В столбце "A" на листе Main имеется раскрывающийся список.
  • При изменении раскрывающегося списка вы хотите добавить заметку в активный выпадающий список.
    • Например, когда раскрывающийся список изменяется на PP, вы хотите добавить Pontypandy, соответствующий PP, в ячейку раскрывающегося списка.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

В этом ответе я хотел бы предложить использовать Google Apps Script и триггер события OnEdit простого триггера. Преобразование из PP в Pontypandy выполняется с использованием объекта.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий сценарий в сценарий привязанного к контейнеру таблицы Google Spreadsheet и сохрани это. При изменении раскрывающегося списка в столбце «A» на листе с Main на PP сценарий запускается триггером события OnEdit, и в качестве примечания можно увидеть значение Pontypandy.

function onEdit(e) {
  const range = e.range;
  if (range.getSheet().getSheetName() == "Main" && range.columnStart == 1) {
    const object = {  // Please set the following object.
      PP: "Pontypandy",
      key1: "value1",
      key2: "value2",
    };
    const v = range.getValue();
    range.setNote(v in object ? object[v] : "no value");
  }
}
  • В этом примере сценария, когда значение раскрывающегося списка не включено в object, no value помещается в заметку. Об этом, пожалуйста, измените его для вашей реальной ситуации.

Примечание:

  • Из вашего вопроса,
    • Я не мог понять информацию о строки столбца «А» в листе Main. Таким образом, в этом примере сценария номер строки не используется. Поэтому, пожалуйста, будьте осторожны с этим. Если вы хотите включить информацию о строке, пожалуйста, отразите ее.
    • Я не мог понять информацию о столбце «А» листа «Места». Таким образом, в этом примере был использован объект, который был создан вручную.
  • При непосредственном запуске функции onEdit в редакторе сценариев возникает ошибка. Поэтому будьте осторожны с этим.

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

Вопрос 2:

  • Вы хотите запустить сценарий с несколькими именами листов.
  • Вы хотите запустить сценарий при изменении раскрывающегося списка в столбце «E».
    • В вашем вопросе из In 'Main' worksheet I have a drop down list in Column A. я проверил столбец "А". Но из вашего ответа эта модификация также отражена.

В этом случае, пожалуйста, измените вышеуказанный скрипт следующим образом.

Модифицированный скрипт:

From:

if (range.getSheet().getSheetName() == "Main" && range.columnStart == 1) {

To:

const sheetNames = ["Main", "Sheet1", "Sheet2",,,];
if (sheetNames.some(s => range.getSheet().getSheetName() == s) && range.columnStart == 5) {
  • Пожалуйста, установите имена листов в массиве sheetNames.
  • . при изменении раскрывающегося списка в столбце «E» на именах листов sheetNames выполняется сценарий.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...