#google-sheets #google-sheets-formula
#google-таблицы #google-таблицы-формула
Вопрос:
Я получил помощь по этому же коду здесь раньше, и он работал действительно отлично! Я очень благодарен stackoverflow и всем, кто вносит свой вклад и помогает друг другу. Мы уже некоторое время используем этот лист и заметили, что строки пропадают. Прямо сейчас пользователи могут установить флажок, чтобы переместить выбранную строку на другую вкладку листа. Иногда, не всегда, он выбирает строку и только перемещает строку под ней на предполагаемый лист и удаляет фактическую выбранную строку. Где? У меня нет Idea…SO ! Я начал с нового листа, и это все еще происходит. Я думаю, что я сузил его до строки, которая ссылается на команду «.getLastRow». Я пробовал .getActiveRow и это не сработало. Есть ли альтернатива getLastRow, которая относится ТОЛЬКО к строке, выбранной флажком? Я думаю, что он считает, что строка ниже является последней строкой, и переносит ее.
Кроме того, если вы знаете лучший способ сделать это, пожалуйста, дайте мне знать. Существуют ли формулы или массивы, которые могли бы сделать это лучше? У меня есть привычка чрезмерно усложнять things…so может быть, код не нужен? В любом случае, спасибо за ваше время!!
Другие используемые формулы: «= ARRAYFORMULA (‘Ответы на прием’!B2: L)» и «= запрос (‘к АБДИ’!A2: N, «ВЫБЕРИТЕ *, где J = ‘Нет'»)»
Код:
function onForm(){
var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sort");
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("To ABDI");
var r = s.getLastRow();
var col = s.getLastColumn();
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,11);
s.getRange(r, 1, 1,col).copyTo(target);
targetSheet.getRange('O2:O').uncheck();
targetSheet.getRange(targetSheet.getLastRow() 0,15).activate().insertCheckboxes();
}
function onEdit() {
// assumes source data in sheet named Upcoming
// target sheet of move to named Current
// getColumn with check-boxes is currently set to column 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if(s.getName() == "To ABDI" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName('Schedule');
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,15);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
targetSheet.getRange('O2:O').uncheck();
targetSheet.getRange(targetSheet.getLastRow() 0,16).activate().insertCheckboxes();
}
}
function onEditF() {
// assumes source data in sheet named Upcoming
// target sheet of move to named Current
// getColumn with check-boxes is currently set to column 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if(s.getName() == "Schedule" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName('Followup');
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,15);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
targetSheet.getRange('O2:O').uncheck();
targetSheet.getRange(targetSheet.getLastRow() 0,16).activate().insertCheckboxes();
}
}
function onEditB() {
// assumes source data in sheet named Upcoming
// target sheet of move to named Current
// getColumn with check-boxes is currently set to column 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if(s.getName() == "Followup" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName('Schedule');
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,15);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
targetSheet.getRange('O2:O').uncheck();
targetSheet.getRange(targetSheet.getLastRow() 0,16).activate().insertCheckboxes();
}
}
function onEditD() {
// assumes source data in sheet named Upcoming
// target sheet of move to named Current
// getColumn with check-boxes is currently set to column 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if(s.getName() == "Schedule" amp;amp; r.getColumn() == 16 amp;amp; r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Done");
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,16);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
function onEditFD() {
// assumes source data in sheet named Upcoming
// target sheet of move to named Current
// getColumn with check-boxes is currently set to column 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if(s.getName() == "Followup" amp;amp; r.getColumn() == 16 amp;amp; r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Done");
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,16);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
Ответ №1:
Я думаю, что одна из проблем в коде заключается в использовании activeRange
и activeSheet
когда вы можете просто использовать объект event.
Модифицированный скрипт
Для меня после изменения этого фрагмента кода и создания копии вашего листа проблема была решена:
function onEdit(e) {
// Moved the checked row in `To ABDI` to `Schedule`
// And removing the moved row and uncheck
var ss = e.source;
let r = e.range;
var s = e.range.getSheet();
if(s.getName() == "To ABDI" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
// Get edited range (row and number of columns)
var row = r.getRow();
var numColumns = s.getLastColumn();
// Retrieveing the target sheet and range
var targetSheet = ss.getSheetByName('Schedule');
var target = targetSheet.getRange(targetSheet.getLastRow() 1,1,1,15);
s.getRange(row, 1, 1, numColumns).moveTo(target);
// Delete moved sheet
s.deleteRow(row);
targetSheet.getRange('O2:O').uncheck();
targetSheet.getRange(targetSheet.getLastRow() 0,16).activate().insertCheckboxes();
}
}
Результат
Ссылка
Комментарии:
1. Вау. Я поражен вашими усилиями здесь. Большое вам спасибо за то, что прошли через все это; тестирование, переписывание, захват gif и размещение ссылок. Сказать, что я действительно ценю вас и ваши усилия, не совсем понятно, но я начну с этого. Большое вам спасибо за ваше время. Я внес эти изменения сегодня утром и сказал сотрудникам войти туда и посмотреть, сможем ли мы «сломать» его вместе. Пока все выглядит довольно хорошо, и мы щелкаем по всему :). ТАААК благодарен!