Если я вас правильно понимаю, вы хотите:
(1) Показать столбец B при нажатии кнопки Employee Left
(в Qualifications
).
(2) Еслипользователь записывает дату в столбце Date Left
(в Qualifications
), все данные в соответствующей строке обрезаются и вставляются в первую пустую строку в Qualifications - Employees Left
, а столбец B снова скрывается.
Я изменил ваш скрипт так, чтобы он выполнял эти задачи.
Во-первых, похоже, что функция EmployeeLeft
, которую вы написали, уже делает то, что должна, но я немного переработал ее. Я не уверен, почему вы хотите активировать, а затем показать столбец C, но в любом случае, все, что вам подходит. Это тот, который я написал:
function EmployeeLeft() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var colIndex = 2;
sheet.showColumns(colIndex);
sheet.getRange("B5").activate();
}
Затем идет основная часть. Чтобы выполнить пункт (2), я написал функцию внутри триггера onEdit
. Я знаю, что у вас уже есть функция onEdit
, но я думаю, что не должно быть никаких проблем при интеграции этого кода в нее.
По сути, эта функция проверяет, является ли отредактированная ячейка из листа Qualifications
, из column B
, а не из строки заголовка, и что отредактированное значение является действительным Дата . Если все эти условия выполнены, отредактированная строка удаляется из Qualifications
, а ее значения копируются в первую пустую строку в Qualifications - Employees Left
. Наконец, column B
снова становится скрытым, пока Employee Left
не будет нажата снова.
Вот функция:
function onEdit(e) {
var ss = e.source;
var sheet = ss.getActiveSheet();
var sheetName = "Qualifications"
var range = e.range;
var editedColumn = range.getColumn();
var editedRow = range.getRow();
var column = 2;
var date = range.getValue();
// Object.prototype.toString.call(date) === '[object Date]' --> checks if value is date
// editedColumn == column && editedRow > 4 --> checks if edited cell is from 'Date Left'
// sheet.getName() == sheetName --> checks if edited sheet is 'Qualifications'
if(Object.prototype.toString.call(date) === '[object Date]' && editedColumn == column && editedRow > 4 && sheet.getName() == sheetName) {
var numCols = sheet.getLastColumn();
var row = sheet.getRange(editedRow, 1, 1, numCols).getValues();
var destinationSheet = ss.getSheetByName("Qualifications - Employees Left");
// Get first empty row:
var emptyRow = destinationSheet.getLastRow() + 1;
// Copy values from 'Qualifications'
destinationSheet.getRange(emptyRow, 1, 1, numCols).setValues(row);
sheet.deleteRow(editedRow);
sheet.hideColumns(column);
}
}
Примите во внимание, что в некоторых строках есть некоторые данные, расположенные намного ниже заголовков в разделе «Квалификации - оставленные сотрудники». Убедитесь, что вы удалили все эти данные, чтобы значения копировались в соответствующие строки.
Обновление
Здесь я делюсь копией электронной таблицы с правильным приложенным сценарием. Я бы посоветовал вам скопировать полный скрипт и вставить его в файл, над которым вы работаете, удалив все предыдущее содержимое:
https://docs.google.com/spreadsheets/d/1XCrcSaDwwmKTHLIxL9vbx0_t6NJew983d9YDol-Y1dw/edit?usp=sharing
- Функция
onEdit(e)
добавлен сверху, включая и тот, который я написал, и тот, который вы уже написали. - Что касается функции
Employee Left
, я прокомментировал тот, который вы написали, и добавил свой ниже. Если вы предпочитаете свою, просто удалите мою и раскомментируйте свою.
Я надеюсь, что это поможет, и, пожалуйста, скажите мне, если это работает для вас.