Я новичок в редакторе сценариев в электронной таблице google и не очень много программиста. Я уже давно работаю с документами google, и это стало важным инструментом в моей повседневной деятельности. То, что я пытаюсь сделать, заключается в следующем: Ищите целый документ (с несколькими листами, такими как «1», «2», «3» и т. Д., Что соответствует количеству дней в месяце.), и если столбец 7 показывает определенное значение (в моем случае это будет RECEBER), потяните все данные в эту строку и напишите на лист, созданный для этой цели. Что происходит, так это то, что я использую событие onEdit для запуска этой функции. На первый взгляд, это было бы идеально, но в моем случае я копирую много данных из других электронных таблиц, а команда paste не вызывает событие onEdit. Вместо этого мне нужно вручную отредактировать ячейку, чтобы скопировать эту строку на другой лист. Я мог бы запустить его только один раз, как только все дни месяца были заполнены, и остались какие-то изменения, но я действительно хочу сделать это немедленно, как только содержимое будет вставлено в электронную таблицу.вытащить данные на конкретный лист в документе
Существует еще одна проблема с моим кодом, она должна быть пригодной и адаптирована ко всем другим листам, поскольку предложение if выполняет только полную операцию, если активный лист равен «1». Во всяком случае, я считаю, что это простое решение.
Вот код, нашел в сети, который уже взял меня на полпути:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "1" && r.getColumn() == 7 && r.getValue() == "RECEBER") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("money");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
Я ценю помощь, которую вы можете дать. Спасибо заранее.
Диого Соуза
- Обновлен 12Oct -
Я изменил логику на моем коде, и, как patt0 предложил, я запустить скрипт из меню, созданного. Я пробовал адаптировать код, но я считаю, что некоторые разделы не соответствуют действительности. Скрипт работает, но ничего не пишет на моем целевом листе.
вот код:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "RECEBER", functionName: "RECEBER"} ];
ss.addMenu("Scripts", menuEntries);
}
function mustBeCopied(sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetNumber = parseInt(sheetName);
if (sheetNumber <=31 && sheetNumber >=1)
return true;
return false;
}
function RECEBER() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
if(mustBeCopied(s.getName()) && r.getColumn() == 7 && r.getValue() == "RECEBER") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("money");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
функция Mustbecopied, от того, что я верю, только устанавливает диапазон листов (от 1 до 31) право; функция RECEBER будет определять, будет ли значение в столбце 7 удовлетворять условию (RECEBER), чтобы он мог получить всю информацию о строке и переместить ее на целевой лист.
Возможно, проблема в том, что проблема с активным листом. Могу ли я использовать ее в своих интересах и применить сценарий к выбранному листу? Кроме того, если бы я мог иметь оба варианта (применить его к выбранному листу или всему документу), это будет здорово и упростит мою повседневную работу!
Благодарим за быстрый ответ. –
Я использовал ваш код, и он работает безупречно. Теперь он может адаптироваться к любому диапазону листов, который я хочу, без необходимости менять код каждый раз, когда я хочу применить его к новому листу. Я просто думаю, что событие onEdit должно отвечать всякий раз, когда я вставляю новый контент в свой документ, взятый из других электронных таблиц. По мере ввода новых данных его следует интерпретировать как эффективное редактирование листа. Есть ли обходной путь для этого? Большое вам спасибо за ваше внимание и внимание. –
Возможно, если бы я мог запускать этот скрипт каждый раз, когда открывается электронная таблица, было бы лучше. Я попытался заменить onEdit на onOpen, но он, похоже, не работает. В любом случае это было бы хорошей идеей, так как каждый раз, когда открывается электронная таблица, скрипт запускается и приносит обновленный результат на листе таргетинга. Любые комментарии к этому приветствуются. Кстати, я отвечаю в соответствующей области? –