2013-12-19 7 views
0

막혔습니다 ... 내 코드가 내 GUI 양식을 표시하고 싶지 않습니다.GUI 양식이 표시되지 않습니다.

이 줄을 추가하려는 경우 : sh.show(app) 전에 sh=SpreadsheetApp.getActive() - 스크립트가 스크립트 편집기에서 올바르게 작동합니다. 그러나! 웹 응용 프로그램으로 배포하려고하면 스크립트가 작동하지 않습니다.

function doGet() { 
    var app = UiApp.createApplication().setTitle('test online').setHeight(400).setWidth(600); 
    var dFormat = UiApp.DateTimeFormat.DATE_LONG 
    var sh = SpreadsheetApp.openById(spreadsheetID); 
    var settings = sh.getSheetByName('Name'); 
    var lastrowTime = sh.getSheetByName('Name').getLastRow(); 
    var settings = settings.getRange("A2:A" + lastrowTime).getValues(); 

    var main2 = app.createGrid(1, 4); 
    var status = app.createLabel().setId('status').setWidth('200'); 
    var card = app.createTextBox().setName('card').setId('card').setWidth('50'); 

    var main1 = app.createGrid(6, 3); 
    var placeA = app.createTextBox().setId('placeA').setName('placeA').setWidth('400'); 
    var placeB = app.createTextBox().setId('placeB').setName('placeB').setWidth('400'); 
    var phone = app.createTextBox().setId(('phone')).setName('phone').setWidth('200'); 
    var timeTo = app.createListBox(false).setWidth(200).setName('timeTo').addItem("...").setVisibleItemCount(1); 

    for (var i = 0; i < settings.length; i++) { 
    timeTo.addItem(settings[i]); 
    } 

    var main = app.createGrid(4, 5); 
    var date = app.createDateBox().setName('date').setFormat(dFormat); 
    var hour = app.createListBox().setName('hour').setWidth('100'); 
    var min = app.createListBox().setName('min').setWidth('100'); 
    for (h=0;h<24;++h){ 
    if(h<10){var hourstr='0'+h}else{var hourstr=h.toString()} 
    hour.addItem(hourstr) 
    } 
    for (m=0;m<60;++m){ 
    if(m<10){var minstr='0'+m}else{var minstr=m.toString()} 
    min.addItem(minstr) 
    } 

    var refresh = app.createButton('Refresh') 
    var button = app.createButton('Submit') 

    var main3 = app.createGrid(1,3); 
    var price = app.createLabel().setId('price').setWidth('400'); 
    var finalStatus = app.createLabel().setId('finalPrice').setWidth('400'); 

    main2.setWidget(0,0, app.createLabel('Client card: ')).setWidget(0,1, card).setWidget(0,3, status); 

    main1.setWidget(1,0, app.createLabel('From')).setWidget(1,1,placeA); 
    main1.setWidget(2,0, app.createLabel('To')).setWidget(2,1,placeB); 
    main1.setWidget(4,0, app.createLabel('Mobile')).setWidget(4,1,phone); 
    main1.setWidget(5,0, app.createLabel('Make a call?')).setWidget(5,1,timeTo); 

    main.setWidget(1,0,app.createLabel('Data')).setWidget(1,1,app.createLabel('hour')).setWidget(1,2,app.createLabel('min')) 
    main.setWidget(2,0,date).setWidget(2,1,hour).setWidget(2,2,min) 
    main.setWidget(2,3,refresh).setWidget(2,4, button) 

    main3.setWidget(0,0, price); 
    main3.setWidget(0,1, finalStatus); 

    var serverHandler = app.createServerHandler('show').addCallbackElement(main).addCallbackElement(main1).addCallbackElement(main2).addCallbackElement(main3); 
    button.addClickHandler(serverHandler) 

    var handler1 = app.createServerHandler('refresh').addCallbackElement(main).addCallbackElement(main1).addCallbackElement(main2).addCallbackElement(main3); 
    refresh.addClickHandler(handler1) 

    var handler2 = app.createServerHandler('checkDate').addCallbackElement(main).addCallbackElement(main1).addCallbackElement(main2).addCallbackElement(main3); 
    date.addValueChangeHandler(handler2) 

    app.add(main2) 
    app.add(main1) 
    app.add(main) 
    app.add(main3) 

sh.show(app) 
} 

답변

1

UI를 표시하는 데 사용하는 방법은 특히 스프레드 시트 컨테이너 용입니다. 당신은 아마 당신이 어디에 있는지 알기 위해 이것을 읽었을 것입니다. 그러나 Creating User Interface Elements in UI Service을 다시 읽으십시오. 특히 doGet()의 예제를 다시 읽으십시오. 함수의 끝에

function doGet() { // A script with a user interface that is published as a web app 
        // must contain a doGet(e) function. 
    ... 
    return myapp; 
} 

, 당신은 단순히 UI 앱 인스턴스를 return해야합니다. show으로 전화하거나 스프레드 시트를 전혀 참조 할 필요가 없습니다.

+0

감사합니다. 그건 내 어리석은 실수 였어. 자, 코드는 잘 작동합니다! – snoop31

관련 문제