Давайте попробуем более простой пример:
function onEdit(e) {
e.source.toast(e.range.getSheet().getName());
}
function abc() {
/do nothing
}
Скопируйте вышеупомянутые функции в ваш редактор скриптов и сохраните их. Затем запустите ab c (), и если вам нужно авторизовать какие-либо скрипты, появится диалоговое окно, позволяющее вам сделать это.
Затем создайте пару страниц, с которыми вы не против возиться. И отредактируйте ячейку в одном из них. В правом нижнем углу экрана появится небольшое диалоговое окно, называемое тостом, в котором будет указано, как называется активная страница. Это всегда страница, которую вы редактировали. Вам необходимо что-то отредактировать на странице, чтобы активировать функцию onEdit (e).
Копирование между листами в одной электронной таблице
Вот пример, который я Я сделал несколько лет go, и я считаю, что это заняло у меня около 4 часов, и я просто сделал это за 30 минут. Это полный пример с настраиваемым диалоговым окном, дающим вам возможность выбирать листы, исходный диапазон и целевой диапазон, а также копировать из исходного в конечный пункт. Удачи с этим.
ах3. html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<style>
input{margin:5px 2px 5px 0};
</style>
</head>
<body>
<br /><select id="sel1" onchange="gotoSheet();"></select>
<br /><input type="text" id="from" placeholder="Select Source Range" />
<br /><input type="button" value="Save Source Range" onClick="saveFrom();"/>
<br /><input type="text" id="to" placeholder="Selection Destination Range" />
<br /><input type="button" value="Save Destination Range" onClick="saveTo(); "/>
<br /><input type="button" value="Copy" onClick="doit()";/>
<script>
var gfrom={};
var gto={};
$(function(){
google.script.run
.withSuccessHandler(function(vA){
updateSelect(vA);
})
.getSelections()
});
function updateSelect(vA,id){
var id=id || 'sel1';
vA.unshift('Please Select Sheet')
var select = document.getElementById(id);
select.options.length = 0;
for(var i=0;i<vA.length;i++) {
select.options[i] = new Option(vA[i],vA[i]);
}
}
function saveFrom() {
google.script.run
.withSuccessHandler(function(fObj){
$('#from').val(fObj.fromrange);
gfrom=fObj;
})
.saveFrom();
}
function saveTo() {
google.script.run
.withSuccessHandler(function(tObj){
$('#to').val(tObj.torange);
gto=tObj;
})
.saveTo();
}
function doit() {
var cObj={};
cObj['fromrg']=gfrom.fromrange;
cObj['fromsh']=gfrom.fromsheet;
cObj['torg']=gto.torange;
cObj['tosh']=gto.tosheet;
google.script.run.doIt(cObj);
}
function gotoSheet() {
google.script.run.gotoSheet($('#sel1').val());
}
console.log('My Code');
</script>
</body>
</html>
Code.gs:
function saveFrom() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=ss.getActiveRange();
return {fromsheet:sh.getName(),fromrange:rg.getA1Notation()};
}
function saveTo() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=ss.getActiveRange();
return {tosheet:sh.getName(),torange:rg.getA1Notation()};
}
function doIt(obj) {
var ss=SpreadsheetApp.getActive();
var fsh=ss.getSheetByName(obj.fromsh);
var frg=fsh.getRange(obj.fromrg);
var tsh=ss.getSheetByName(obj.tosh);
var trg=tsh.getRange(obj.torg);
frg.copyTo(trg);
}
function getSelections() {
var ss=SpreadsheetApp.getActive();
var shts=ss.getSheets();
var sA=shts.map(function(s){return s.getName();});
return sA;
}
function gotoSheet(name) {
var ss=SpreadsheetApp.getActive();
ss.getSheetByName(name).activate();
}
function copyRanges() {
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('ah3'), "Copy From One Range to Another")
}
Запуск copyRanges запускает все это.
Анимация:
Вот как я думаю, я бы переписал ваш код. Но я догадываюсь здесь немного, потому что я действительно не знаю, что вы пытаетесь выполнить sh.
function printIng() {
var ss=SpreadsheetApp.getActive();
var ash=ss.getActiveSheet();
var ashname=ash.getName();
var currentCell=ash.getActiveCell();
if(ashname != "Indice Ricette" && ashname != "Template" && ashname != "Ingrediente" && ashname != "Impostazioni" && ashname != "Tipologia"){
Я не понимаю цели вышеупомянутого условия, но ясно, что если case bianca
или какое-либо другое имя листа, кроме имен в состоянии if, является активным листом, то вы никогда не попадете сюда
//The only sh that makes it to here is Base Bianca
var nameRicetta=ss.getActiveSheet().getRange('C4').getValue();//so this makes no sense
var ui=SpreadsheetApp.getUi();
var result=ui.alert('Please confirm','Are you sure you want create'+ '['+ nameRicetta +'] ingredient?',ui.ButtonSet.YES_NO);
if (response == ui.Button.YES) {
var sh=ss.getSheetByName("Ingredienti");
var dataRange=sh.getDataRange();
var columnToCheck=sh.getRange(1,1,sh.getLastRow(),1).getValues();
var lastRow=sh.getLastRow()+1;
sh.getRange(lastRow,1,1,1).setFormula('='+ nameRicetta +'\!Y2');
sh.getRange(lastRow,2,1,1).setFormula('='+ nameRicetta +'\!Y2');
sh.getRange(lastRow,3,1,1).setFormula('='+ nameRicetta +'\!Y2');
sh.getRange(lastRow,4,1,1).setFormula('='+ nameRicetta +'!Y2');
sh.getRange(lastRow,5,1,1).setFormula('='+ nameRicetta +'!Y5');
sh.getRange(lastRow,6,1,1).setFormula('='+ nameRicetta +'!Y8');
sh.getRange(lastRow,7,1,1).setFormula('='+ nameRicetta +'!Y11')
sh.getRange(lastRow,8,1,1).setValue('0');
sh.getRange(lastRow,9,1,1).setValue('0');
sh.getRange(lastRow,10,1,1).setFormula('='+ nameRicetta +'!S25');
sh.getRange(lastRow,11,1,1).setFormula('='+ nameRicetta +'!Q25');
}
}
}