Превращение относительной ссылки на ячейку в абсолютную в формуле скрипта приложения Google листов - PullRequest
0 голосов
/ 14 мая 2019

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

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

прямо сейчас этот код выглядит так: (обратите внимание, этот код не имеет автозаполнения)

'' '

 function setprice() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(1, 4).activate()
 .setFormulaR1C1('=vlookup(R[0]C[-4],INDIRECT(R2C2&1),2)');

 spreadsheet.getCurrentCell()
.setFormulaR1C1('=vlookup(R[0]C[-4],IND''' 
  IRECT(R[-1]C[-4]&1),2)'); };

'' '

Итак, когда это лист, он выглядит так:

=vlookup(B3,INDIRECT(B2&1),2)

Когда он автоматически заполняется, он меняется следующим образом:

 =vlookup(B3,INDIRECT(B2&1),2)    
 =vlookup(B4,INDIRECT(B3&1),2)
 =vlookup(B5,INDIRECT(B4&1),2)
 =vlookup(B6,INDIRECT(B5&1),2)

и мне нужно, чтобы это изменилось так:

  =vlookup(B3,INDIRECT($B$2&1),2)
  =vlookup(B4,INDIRECT($B$2&1),2)
  =vlookup(B5,INDIRECT($B$2&1),2)
  =vlookup(B6,INDIRECT($B$2&1),2)

другой код, который я устал, выглядит так '' '

function fillin() {
 var spreadsheet = SpreadsheetApp.getActive();
 spreadsheet.getCurrentCell().
  setFormulaR1C1('=vlookup(R[0]C[-4],INDIREC 
  T(R2C2&1),2)');
  spreadsheet.get
  var destinationRange = spreadsheet.getActiveRange().offset(0, 0, 
   14);
   spreadsheet.getActiveRange().autoFill(destinationRange, 
   SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
  spreadsheet.getCurrentCell().offset(0, 0, 14, 1).activate();
    };

''» Этот код, когда он используется в разностной ячейке для поиска (например, я хочу использовать B8 вместо B2), код будет таким же, как и выше, когда я запусту, он получит абсолютное значение.

Лист, в котором я работаю, имеет раскрывающийся список и зависимый раскрывающийся список в том же столбце. У одного есть названия листов, а у другого есть пункты в этих листах. У меня настроен код, поэтому, когда я выбираю имя листа, второй выпадающий список автоматически заполняется ниже пунктами. Когда запускается функция setprice, мне нужно выбрать смещение активной ячейки (которое имеет имя листа) относительно правильной ячейки и вставить формулу, используя «ячейку имени листа» и ячейку поискового значения (элемента). Затем он мне нужен, чтобы превратить «ячейку с именем листа» в абсолютную и заполнить ее, так что значение поиска изменится, но «ячейка с именем листа» останется прежней.

Прямо сейчас, когда я запускаю любой из этих кодов. Он либо возвращает все как относительные ячейки, либо возвращает «ячейку с именем листа» как абсолют (например: я хочу, чтобы «ячейка с именем листа» исходила из активной ячейки при запуске кода. Если эта ячейка будет B8, моя формула будет все еще выглядит так, = ВПР (В9, ДВССЫЛ ($ B $ 2 и 1), 2) когда я хочу, чтобы это выглядело так = ВПР (B3, ДВССЫЛ ($ B $ 8 & 1), 2)

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

...