#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. Извините, я новичок на этом форуме. Кажется, я забыл упомянуть вас в посте.