Скрипт Google Apps для замены формулы текстом в текущей строке - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь написать скрипт на листах Google, чтобы при изменении ячейки в столбце F она копировала и вставляла значения в одну и ту же строку в столбцах b: e. Буду признателен за любую помощь.

У меня есть лист Google, где операторы регистрируют события. Они вводят ссылочный номер в столбце a, и он ищет соответствующие данные (из другой вкладки) и отображает их в столбцах b-e. Затем они добавляют данные, такие как их имя, текущее время и т. Д. В столбцы F-M. Я пытаюсь написать скрипт, чтобы при изменении столбца F он копировал результаты из формул в столбцах b-e в текущей строке и вставлял их обратно в качестве значений.

Причина двоякая: одно удаление формул и вставка значений повышает производительность, а два - если кто-то изменил данные поиска, строка становится поврежденной.

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

//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = 1;
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,11];
// Sheet you are working on
var SHEETNAME = 'ReceivingLog'

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //checks that we're on the correct sheet.
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    //checks the column to ensure it is on the one we want to cause the date to appear.
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date());
      }
  }
}

1 Ответ

0 голосов
/ 10 ноября 2018

Частично решено: вторая функция (ниже) работает как автономная для копирования значений вставки, но ей не нравятся две функции, связанные друг с другом следующим образом. Нужна помощь в том, как совместить два сценария.

//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = 1;
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,11];
// Sheet you are working on
var SHEETNAME = 'ReceivingLog'

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //checks that we're on the correct sheet.
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    //checks the column to ensure it is on the one we want to cause the date to appear.
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue(new Date());
      }
  }
}

//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK2 = 2;
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION2 = [0,-1];

// Sheet you are working on
var SHEETNAME2 = 'PurchaseOrders'

function onEdit2(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //checks that we're on the correct sheet.
  if( sheet.getSheetName() == SHEETNAME2 ) { 
    var selectedCell = ss.getActiveCell();
    //checks the column to ensure it is on the one we want to cause the date to appear.
    if( selectedCell.getColumn() == COLUMNTOCHECK2) { 
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION2[0],DATETIMELOCATION2[1]);
      var data = dateTimeCell.getValues()
      dateTimeCell.setValue(data) , {contentsOnly: true};
      }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...