Можно ли превратить значение ввода в сценарии «Мои приложения» ниже в жестко закодированный текст, чтобы в заметке отображался только текст?

#google-apps-script #google-sheets #google-sheets-formula #spreadsheet

Вопрос:

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

Я немного поиграл со сценарием Google apps и сумел создать заметку на основе правильной ячейки, но проблема в том, что в заметке показана только формула объединения, а не контактная информация. Есть ли способ изменить формат в сценарии, чтобы в заметке отображалась контактная информация, а не формула? или есть какой-то простой обходной путь, который можно использовать?

 function onEdit(e) {

  var spreadSheet = e.source;
  var inputValue = e.value;
  var SheetName = spreadSheet.getActiveSheet().getName();

  if(SheetName == 'Apps Script' amp;amp; e.range.columnStart == 2 amp;amp; e.range.rowStart != 1)
    e.range.offset(0,1).setNote([inputValue]).setValue([inputValue]);
}
 

с уважением
Йоаким

Комментарии:

1. Для setNote() требуется строка. Для функции setValues() требуется двумерный массив. попробуйте просто e.значение

Ответ №1:

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

var rawText = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(e.range.rowStart, e.range.columnStart).getValue();

И измените значение примечания на rawText . Ниже приведен полный код с внесенными в него изменениями.

 function onEdit(e) {

  var spreadSheet = e.source;
  var inputValue = e.value;

  var rawText = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(e.range.rowStart, e.range.columnStart).getValue();
  //console.log(rawText);
  
  var SheetName = spreadSheet.getActiveSheet().getName();

  if(SheetName == 'Apps Script' amp;amp; e.range.columnStart == 2 amp;amp; e.range.rowStart != 1)
    e.range.offset(0,1).setNote(rawText).setValue([inputValue]);
}
 

Обновленный Код:

 function onEdit(e) {

  var spreadSheet = e.source;
  var inputValue = e.value;
  var rawText = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(e.range.rowStart, e.range.columnStart).getValue();
  //console.log(rawText);
  var SheetName = spreadSheet.getActiveSheet().getName();

  if(SheetName == 'Case1' amp;amp; e.range.columnStart == 3 amp;amp; e.range.rowStart != 1)
    var noteText = e.range.offset(0,34).getValue();
    e.range.offset(0,1).setNote(noteText).setValue(noteText);
}
 

Комментарии:

1. Привет, большое спасибо за помощь. Теперь он показывает правильную информацию в нужном месте. Однако, похоже, он не обновляется, когда я обновляю контактную информацию. Можно ли заставить скрипт реагировать не только на изменения, которые я делаю в ячейке, но и на изменения, которые происходят из-за изменений, которые я делаю в других ячейках?

2. У меня есть вся контактная информация на отдельном листе, поэтому было бы идеально, если бы скрипт запускался всякий раз, когда я вносил какие-либо изменения в лист под названием «Контактная информация».

3. @joakimgranat-это ячейка, которую вы хотите обновить с помощью примечания, также указанного в листе контактной информации? Или это что-то, где вы редактируете значение на этом листе, и оно изменяет значение в столбце A (которое затем нужно будет добавить к примечанию в колонке B, как указано выше)? Не могли бы вы поделиться примером того, что вы пытаетесь сделать?

4. Документ выглядит примерно так: docs.google.com/spreadsheets/d/… Поэтому я редактирую информацию (пару сотен строк) в столбце C-M на листе с именем «Контактная информация». Информация суммируется так, как мне нравится, чтобы она отображалась простой согласованной формулой в столбце N. В листе «Дело» я затем использую Vlookup в столбце AK, чтобы сопоставить информацию из контактного листа с нужным клиентом. Сценарий, с которым вы мне помогли, смещает информацию из столбца AK в столбец D в виде текста и в примечании на листе.

5. Извините, я новичок на этом форуме. Кажется, я забыл упомянуть вас в посте.