Я считаю, что смог решить эту проблему в среде моделирования.
Прежде всего, метод onEdit, по-видимому, не работает, когда вы обращаетесь к другим таблицам SpreadSheets, поскольку это должно быть только для простых скриптов , Поэтому вам нужно создать функцию с другим именем и запустить ее как триггер, как указал SpiderPig в комментариях к вашему вопросу.
Кроме того, я считаю, что функция moveTo должна работать только внутри одного и того же SpreadSheet, поэтому вам придется использовать другой подход для этого, я использовал appendRow.
Очень полезное место для получения информации обо всем, что вам нужно в сценариях приложений Google, - это one: https://developers.google.com/apps-script/
Вот сценарий, который я использовал, чтобы заставить его работать:
function Test(e) {
//Oficial
var s = e.source.getActiveSheet();
var r = e.range;
//Test
//var s = SpreadsheetApp.getActiveSheet(); //Gets active Sheet.
//var r = s.getRange(2, 1, 1, 2); //Gets first line after header.
var targetSheet = SpreadsheetApp.openById("15V0AvU84OBmN0nQweNyYczh5UfOTX77eECzu_1Um6Ug").getSheetByName("Verified Expenses");
//To View Logs, enter no View, Logs after the execution of the script
Logger.log(s.getName());
Logger.log(r.getColumn());
Logger.log(r.getValue());
if(s.getName() == "Input Expenses" && r.getColumn() == 1 && r.getValue() == "Verified") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var rangeToAdd = s.getRange(row, 1, 1, numColumns).getValues(); //Creates an Array[][], being the first dimension the rows and the second one the columns.
var rangeToAddFiltered = rangeToAdd[0]; //Get the first row of the array (as we will only check one by one).
targetSheet.appendRow(rangeToAddFiltered); //Append the Row to the new SpreadSheet (moveTo appears to work only inside the same SpreadSheet).
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.deleteRow(row); //Profit!
}
}
Не забудьте добавить тест (e) в триггер onEdit в триггерах «Ресурсы», «Текущий проект».
[/g1]
Надеюсь, это вам поможет.
Обновление:
Если это все равно вам не помогает, возможно, у вас есть некоторые проблемы с разрешением (при первом запуске скрипта появляется окно с запросом разрешения для скрипта для изменения электронных таблиц). Возможно, альтернативой было бы заставить поддельное событие в фиксированном диапазоне просто уметь отлаживать функцию, чтобы увидеть, что происходит. Я добавил некоторые прокомментированные строки в приведенном выше скрипте, которые, если они не были учтены, могут быть использованы для полного запуска скрипта через интерфейс сценария для тестирования / отладки.
Генерировать toString, hashCode и равно из Eclipse, генерировать опцию или подобную опцию из любой IDE
Ваш hashCode
не соответствует вашей equals
реализации. Если a.equals(b)
истинно, a.hashCode == b.hashCode()
также должно быть истиной.
Поскольку equals
требует только, чтобы имена были равны, hashCode
должен возвращать name.hashCode()
.
public int hashCode()
{
return name.hashCode();
}