Эта функция работает автономно для перемещения ряда данных на другой лист.Я понимаю, что мне нужно захватить эту строку данных в переменную, чтобы я мог обработать ее в другой функции.Но я рассмотрел и попробовал различные идеи для захвата строки, используя уже определенные там переменные, но недели идут без прогресса.
function onEdit(e){
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var column = r.getColumn();
//moving from the Form Responses 1 sheet to the Processed sheet
if(s.getName() == "Form Responses 1" && r.getColumn() == 1 && r.getValue() == true) {
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Processed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);
}
var ProOrd = HtmlService.createHtmlOutput(target);
SpreadsheetApp.getUi().showModelessDialog(ProOrd, 'Details have been archived to the Processed sheet')
}
Может кто-нибудь показать, как получить эту строку в переменную для массажа послепросто переместить его на другой лист?
Я хочу взять эти «целевые» данные и вытолкнуть их в диалоговое окно.Конечный пользователь поместит информацию в другое программное обеспечение и закроет этот диалог.Это не требует никакого взаимодействия, кроме как для них, чтобы закрыть окно.Когда я сейчас запускаю эту функцию на своем листе, отладчик работает без ошибок, но stacklogger говорит
«У вас нет разрешения на вызов showModelessDialog для onEdit (TestCode: 16)»
Я решил это и переименовал функцию, поскольку она могла конфликтовать с триггером события, который я должен был установить.Вот код, который у меня сейчас есть:
function onConf(e){
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var column = r.getColumn();
//moving from the Form Responses 1 sheet to the Processed sheet
if(s.getName() == "Form Responses 1" && r.getColumn() == 1 && r.getValue() == true) {
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Processed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);
}
var ProOrd = HtmlService.createHtmlOutput(numColumns);
SpreadsheetApp.getUi().showModelessDialog(ProOrd, 'Details have been archived to the Processed sheet')
}
Как и предполагалось, я уже получил эти данные (и это имеет смысл для меня. Я не вижу, как они перемещают данные без их захвата)).
Но здесь я попробовал:
var ProOrd = HtmlService.createHtmlOutput(target);
var ProOrd = HtmlService.createHtmlOutput(numColumns);
var ProOrd = HtmlService.createHtmlOutput(row);
При использовании target в сообщении появляется только «undefined».Используя numColumns в сообщении написано "7".При использовании строки в сообщении говорится «2».Даже я не вижу смысла использовать переменные "s" или "r".Итак, я попробовал это:
if(s.getName() == "Form Responses 1" && r.getColumn() == 1 && r.getValue() == true) {
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Processed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
var outPUT = s.getRange(row, 1, 1, numColumns);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);
}
var ProOrd = HtmlService.createHtmlOutput(outPUT);
SpreadsheetApp.getUi().showModelessDialog(ProOrd, 'Details have been archived to the Processed sheet')
}
, но определение переменной outPUT
таким способом также приводит к появлению сообщения «Undefined» в диалоговом окне.Убирайся.Где скрывается этот ряд информации?
Мне удалось добиться большего успеха!У меня есть этот код сейчас:
function onConf(e){
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var column = r.getColumn();
//moving from the Form Responses 1 sheet to the Processed sheet
if(s.getName() == "Form Responses 1" && r.getColumn() == 1 && r.getValue() == true) {
var numColumns = s.getLastColumn();
var data = ss.getDataRange().getValues(); // added
var targetSheet = ss.getSheetByName("Processed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);
}
var ProOrd = HtmlService.createHtmlOutput(**data**);
SpreadsheetApp.getUi().showModelessDialog(ProOrd, 'Details have been archived to the Processed sheet')
}
Я читал и пытался BOLDing новую строку кода для переменной data
, и это вызов в HTML-код.Но, кажется, он только что добавил две звездочки до и после, я не вижу его жирным шрифтом в диалоговом окне.
Я действительно получаю массив данных в толкаемом диалоговом окне!Однако это ВСЕ строки на листе, а не одна, которая соответствует условию true
.Включая «Ложные» отчеты по всем открытым строкам на листе.
Как я могу ограничить этот массив только теми данными, которые соответствуют условию?На самом деле это ДОЛЖНО быть только один ряд данных за один раз.Я прикрепил изображение.В то время на листе было 3 строки информации.Я щелкнул 3-й ряд ПРОЦЕСС ДАЛЕЕ, и он переместил этот ряд данных и выдвинул массив в диалог.Вы можете увидеть эту 3-ю строку данных (для моего Пирса Эрроу) в презентации и заметить на заднем плане, что она перемещена.Теперь он находится на другом листе, как и хотелось.
Я думал, что размещение переменной данных в коде, где я это сделал, будет захватывать массив данныхПОСЛЕ истинного состояния было признано.Очевидно, это не очень хорошо, но я учусь и настойчив.
Работали над этим практически все выходные и добились определенного прогресса, но пока не понимаем.Вот код, который у меня есть на данный момент:
function onConf(e){
var ss = SpreadsheetApp.getActive();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
var row = r.getRow();
var column = r.getColumn();
//moving from the Form Responses 1 sheet to the Processed sheet
if(s.getName() == "Form Responses 1" && r.getColumn() == 1 && r.getValue() == true) {
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Processed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);}
var celldata=s.getRange(row, 1, 1, numColumns).getValues();
var data=HtmlService.createHtmlOutput(celldata);
SpreadsheetApp.getUi().showModelessDialog(data, 'Details have been archived to the Processed sheet')
}
Я выполнил этот тест первый раз, и он на самом деле сгенерировал вывод наполовину так, как я хочу.Я так взволнован!
Но все последующие тесты не пройдены.
Предоставление только диалога с ложными ,,,,, в теле.
Далее я теперь получаю этоОшибка при попытке пройти функцию: Не удается найти метод getRange (число, число, число, (класс)).(строка 14, файл "TestCode") Уволить
Я не понимаю, почему тот же код работает для копирования строки данных в цель, но не для определения переменной, представляющей значения в этихЯчейки для представления в диалоге.
Я знаю, что я не совсем не в курсе.Если я заменю этот код:
var celldata=s.getRange(row, 1, 1, numColumns).getValues();
на этот код:
var celldata="heres some data to review";
, я получу сообщение, выдвинутое в диалоговое окно.
.... так близко ...Я так же попробовал этот код:
var celldata=s.getSheetValues(row, 1, 1, numColumns);
Но получаю похожую ошибку при обходе кода: Не удается найти метод getSheetValues (число, число, число, (класс)).(строка 14, файл "TestCode") Отклонить
Что я не понимаю в командах getSheetValues и / или getRange.getValues?Они звучат так логично ...