#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
Я создал таблицу Google, которая служит для отслеживания номеров партий в производственных условиях. Прямо сейчас, когда включен триггер onEdit, данные из исходного листа удваивают только первую строку данных в целевом листе. Вот ссылка на лист. Это код, который у меня есть до сих пор:
function onEdit(e) {
if (e.range.getA1Notation() == 'N2') {
if (/^w $/.test(e.value)) {
eval(e.value)();
e.range.clear();
}
}
}
function Reset() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Input" ) {
var dataRange = s.getRange('A5:V14');
var values = dataRange.clearContent();
s.getRange("C5:C14").setValue('-');
s.getRange("F5:F14").setValue('-');
s.getRange("I5:I14").setValue('-');
s.getRange("L5:L14").setValue('-');
}
}
function Submit() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Input');
const targetSheet = ss.getSheetByName('Database');
const data = sh.getRange(5,1,1,23).getValues(); // A5:W14
targetSheet.getRange(targetSheet.getLastRow() 1,3,data.length,data[0].length).setValues(data);
}
Комментарии:
1. Вы уверены, что добавили правильный код? Функция onEdit не выполняет то, что было описано.
2. Не могли бы вы уточнить, в чем заключается ваш вопрос? И
3. Проблема, с которой вы сталкиваетесь, когда код добавляет только первую строку дважды, исходит из следующей строки в
Submit()
функции:const data = sh.getRange(5,1,1,23).getValues(); // A5:W14
МетодgetRange(row, column, numRows, numColumns)
, который вы указываете, позволяет получить только одну строку.4. Извините за путаницу, я все еще изучаю жаргон в Apps Script. Я хотел спросить, как я могу использовать функцию отправки () для отправки информации с листа ввода на лист базы данных без отправки пустых строк с дефисами. Прямо сейчас функция отправляет только первую строку дважды, в отличие от всех данных, введенных на листе ввода. Лист «База данных» будет служить производственными записями для компании. Если возможно, я также хотел бы отправить дату из ячейки B1 на листе «Ввод» в лист «База данных» вдоль каждой строки, в которой данные представлены в этот конкретный день.
Ответ №1:
Если я правильно понял ваш вопрос, вы обеспокоены тем, что при выборе отправки происходит двойная вставка данных в лист базы данных. Можно предположить, что это связано с тем, что функция отправки выполняется дважды. Первый раз при проверке /^w $/.test(например,значение) и второй раз непосредственно при запуске eval(например,значение)(). Я не уверен, является ли это ошибкой или особенностью 🙂
Попробуйте этот код, он работает:
function onEdit(e) {
if (e.range.getA1Notation() == 'N2') {
var val = e.value;
switch(val) {
case 'Reset': Reset();
break;
case 'Submit': Submit();
break;
}
e.range.clear();
}
}
Upd.
Двойная вставка связана с тем, что вы используете 2 триггера onEdit(). Взгляните на Edith / триггеры текущего проекта. Удалите его.
Upd2.
Если вы хотите, чтобы на листе базы данных отображались только заполненные строки из 10, используйте этот код. Он фильтрует строки на основе наличия некоторого текста в столбце H, например, для взрослых или детей.
function Submit() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Input');
var targetSheet = ss.getSheetByName('Database');
var data = sh.getRange(5,1,10,23).getValues();
Logger.log(data);
var fData = data.filter(data => (data[13] != ""));
Logger.log(fData);
targetSheet.getRange(targetSheet.getLastRow() 1,3,fData.length,fData[0].length).setValues(fData);
}
Комментарии:
1. Это именно то, что я ищу, спасибо! Однако при попытке сохранить его я получаю следующую ошибку «Синтаксическая ошибка. строка: 30 файл: Code» для этой строки кода:
var fData = data.filter(data => (data[13] != ""));
2. Включите Apps Script V8 в меню «Выполнить».