Есть ли способ динамически ссылаться на ячейки в сценариях для листов Google с помощью редактора сценариев, чтобы создать заметку в другой ячейке? - PullRequest
0 голосов
/ 02 мая 2019

Я хочу иметь возможность быстро и легко добавлять заметки (меню Вставка / Заметка) в несколько ячеек Google Sheets, используя значения ячеек в других столбцах на этом листе. Например, F3 будет получать значения ячеек в X3, F4 из X4. Но также, если я возьму G3, он получит значения в Y3 (поэтому он последовательно захватывает значения в одной и той же строке, но всегда одинаковое количество столбцов справа (в этом случае всегда 18 столбцов справа). Я хочу взять эти значения и вставить их в заметку слева (столбцы F, G и т. Д.). Я хотел бы выделить диапазон (F3-F10), запустить скрипт Google и захватит все значения на X3-X10 и прикрепит их к относительным строкам. Возможно ли это?

Я охотился за этой опцией, искал все возможные термины, и я довольно близко подошел, но я продолжаю зацикливаться на многих моментах, и самое важное - это возможность получить данные из равное количество столбцов справа, относительно диапазона, который я выделяю. Я нашел этот код , который приближает меня, но я не знаю, как отредактировать его, чтобы сделать то, что мне нужно. Это позволяет мне создать опцию меню, которая работает при извлечении значения A1 на первой вкладке моей электронной таблицы (я работаю над второй вкладкой, и она только собирает одни и те же данные для всех моих заметок). Вот код, над которым я работаю, но также и вторая функция, которая, на мой взгляд, обладает необходимыми мне функциями, такими как захват активного листа.

function noteSetter() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0]; //I need to make this grab the right sheet

 var cell = sheet.getRange(2, 2); //this and the line below it seem to be critical here...
 cell.setNote(sheet.getRange(1,1).getValue()); 
}

//below gives me the menu option to run the script, but I'm open to changing this
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
  name : "Set cell note",
    functionName : "noteSetter"
  }];
  sheet.addMenu("Scripts", entries);
};

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

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (sheet.getName() == "Project"){ //Change to your sheet name
    var sourceRange = e.source.getActiveRange();
    var sourceRow = sourceRange.getRow();
    var sourceColumn = sourceRange.getColumn();
    var sourceValue = sourceRange.getValue();

    if(sourceColumn == 1){ //Change to the column you want to get the value from
      var noteCell = sheet.getRange(sourceRow, 2); //The cell where the Note should be, B-column on the current row
      noteCell.setNote(sourceValue);
    }
  }
}

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

function noteSetter() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var cell = sheet.getActiveRange();
 cell.setNote(sheet.getRange(sourceRow, sourceColumn).getValue());
}

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
  name : "Set cell note",
    functionName : "noteSetter"
  }];
  sheet.addMenu("Scripts", entries);
};

Любые предложения о том, как сделать эту работу?

1 Ответ

0 голосов
/ 17 мая 2019

Просто чтобы немного замкнуть цикл, я на 90% ниже, чем ниже. Это прекрасно работает, когда я выделяю одну ячейку. Но если я выделю больше (например, диапазон или массив), он вставит только верхнее и крайнее левое значение в качестве заметки во все выделенные ячейки.

function noteSetter() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = sheet.getActiveRange().offset(0, 18);
  var cells = sheet.getActiveRange();

  cells.setNote((row, column).getValue());
}

Я думаю, что следующим шагом будет использование класса Selection , но этого достаточно для моих целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...