我有这段代码:
//Creo degli oggetti contenenti i fogli
//var ss = SpreadsheetApp.getActiveSpreadsheet();
//var eu = ss.getSheetByName("EntrateUscite");
var files = DocsList.find("Cartellino");
for (var i in files){
var fileId = files[i].getId();
}
var ss = SpreadsheetApp.openById(fileId);
var eu = ss.getSheetByName("EntrateUscite");
var ultimaRigaPiena = eu.getLastRow();
var primaRigaVuota = eu.getLastRow()+1;
var colTimeS =1;
var colTipo =2;
var colLav =3;
var colLavD =4;
var colInc =5;
var colIncD=6;
var colMese =7;
var colTargetMese =8;
var colGiorno=9;
var colTargetGiorno=10;
function doGet(e) {
var app = UiApp.createApplication();
//////////////////////////////////////////////////////////
var buttonEntrata = app.createButton('Entrata');
app.add(buttonEntrata);
var labelEntrata = app.createLabel('Entrata!')
.setId('statusLabelEntrata')
.setVisible(false);
app.add(labelEntrata);
var handlerEntrata = app.createServerHandler('myClickHandlerEntrata');
buttonEntrata.addClickHandler(handlerEntrata);
/////////////////////////////////////////////////////////////
var buttonUscita = app.createButton('Uscita');
app.add(buttonUscita);
var labelUscita = app.createLabel('Uscita!')
.setId('statusLabelUscita')
.setVisible(false);
app.add(labelUscita);
var handlerUscita = app.createServerHandler('myClickHandlerUscita');
buttonUscita.addClickHandler(handlerUscita);
return app;
}
function myClickHandlerEntrata(e) {
var app = UiApp.getActiveApplication();
var labelEntrata = app.getElementById('statusLabelEntrata');
labelEntrata.setVisible(true);
entrata()
app.close();
return app;
}
function myClickHandlerUscita(e) {
var app = UiApp.getActiveApplication();
var labelUscita = app.getElementById('statusLabelUscita');
labelUscita.setVisible(true);
uscita()
app.close();
return app;
}
function entrata(){
entrataUscita("1");
}
function uscita(){
entrataUscita("0");
}
function entrataUscita(tipo) {
//Controllo se l'ultimo record è di tipo (un'entrata o un'uscita) diverso da quello corrente
if(eu.getRange(ultimaRigaPiena,colTipo).getValue()!=tipo){
//in se non lo è procedo
writeOnLastEmptyRow(colTimeS,getCurrTimeStamp());
writeOnLastRow(colTipo,tipo);
//Se il tipo è uscita allora calcolo quanto tempo è passato tra l'entrata e l'uscita con l'incrementale
if(tipo==0){
//Inserisco le ore lavorative come durata
eu.getRange(primaRigaVuota,colLav).setFormula("="+int2Let(colTimeS)+primaRigaVuota+"-"+int2Let(colTimeS)+(primaRigaVuota-1));
//Inserisco le ore lavorative come decimale
eu.getRange(primaRigaVuota,colLavD).setFormula("=TO_TEXT("+int2Let(colLav)+primaRigaVuota+")*24");
//Scrivo il mese
eu.getRange(primaRigaVuota,colMese).setFormula("=CONCATENATE(LOOKUP(MONTH("+int2Let(colTimeS)+primaRigaVuota+
");'Nomi mesi'!A1:B12);\" \";YEAR("+int2Let(colTimeS)+primaRigaVuota+"))");
//Scrivo il target mensile
eu.getRange(primaRigaVuota,colTargetMese).setFormula("=Target!E2")
//Scrivo il giorno
eu.getRange(primaRigaVuota,colGiorno).setFormula("=CONCATENATE(YEAR("+
int2Let(colTimeS)+primaRigaVuota+");\"/\";TEXT(MONTH("
+int2Let(colTimeS)+primaRigaVuota+");\"00\");\"/\";TEXT(DAY("+
int2Let(colTimeS)+primaRigaVuota+");\"00\"))")
//Scrivo il terget giornaliero
eu.getRange(primaRigaVuota,colTargetGiorno).setFormula("=Target!C2")
//Se la cella con la quale devo fare l'addizione non è una durata
if(isValidDate(eu.getRange(primaRigaVuota-2,colInc).getValue())){
//la uso
eu.getRange(primaRigaVuota,colInc).setFormula("="+int2Let(colLav)+primaRigaVuota+"+"+int2Let(colInc)+(primaRigaVuota-2));
}else{
//altrimenti no
eu.getRange(primaRigaVuota,colInc).setFormula("="+int2Let(colLav)+primaRigaVuota);
}
//inserisco formula ore incrementeli in decimale
eu.getRange(primaRigaVuota,colIncD).setFormula("=TO_TEXT(" + int2Let(colInc)+primaRigaVuota +")*24");
}
}else{
if(tipo==1){
Browser.msgBox("Sei già dentro!");
}else{
Browser.msgBox("Sei già uscito!");
}
}
}
//Scrivo sul'ultima riga specificando la colonna ed il testo
function writeOnLastEmptyRow(column, text) {
eu.getRange(eu.getLastRow()+1,column).setValue(text);
}
//Scrivo sul'ultima riga specificando la colonna ed il testo
function writeOnLastRow(column, text) {
eu.getRange(eu.getLastRow(),column).setValue(text);
}
function getCurrTimeStamp(){
///si aggiunge un'ora per l'ora legale
var oraCorrente = Utilities.formatDate(new Date().addHours(1), "GMT+1", "dd-MM-yyyy HH.mm.ss");
return oraCorrente;
}
Date.prototype.addHours= function(h){
this.setHours(this.getHours()+h);
return this;
}
function isValidDate(value) {
var dateWrapper = new Date(value);
return !isNaN(dateWrapper.getDate());
}
function int2Let(n){
return String.fromCharCode(65 + n-1); // where n is 0, 1, 2 ... IL -1 SERVE PERCHE L'INDICIZZAZIONE PARTIREBBE DA 0
}
function prova(){
var prova = "sgh"
Browser.msgBox(int2Let(1))
}
结果应该是一个带有2个按钮的网页。
但是当我使用谷歌给我的链接分享它时,我得到了这个错误:
TypeError:Impossibile chiamare il metodo" getSheetByName" di null。 TypeError:无法调用方法" getSheetByName"为null。 (英文):P
相反,当我点击"尝试使用您的代码的最后一个版本的应用程序"在共享页面上,我得到另一个有用的链接....
为什么?
答案 0 :(得分:0)
您必须保存新版本的代码(文件菜单>管理版本),并使用最新版本的编号更新部署窗口中的版本号。
您提到的另一个链接是测试版本,它允许您独立于已部署的版本测试您的代码,并且只有您(最终是脚本共同编辑者)可以使用。