2013-04-25 3 views
0

Главный вопрос: почему сценарий ниже не возвращает ничего? Когда задана версия и развертывается, скрипт возвращает «Сценарий завершен, но ничего не возвращает».Службы скриптов Google Apps: сценарий завершен, но ничего не возвращает?

(Bonus вопрос: могу ли я запустить две карты на двух разных DataTables в пределах одной и той же панели приборов и в пределах того же сценария?)

вход представляет собой электронную таблицу Google с четырьмя колоннами и строка заголовка: Год | Месяц | Group | Count, все числительные, кроме Group (однобуквенные).

Целью является создание линейной диаграммы общего количества по годам (201001, 201002 ...). В идеале я хотел бы создать еще одну линейную диаграмму общего количества по годам в одном и том же скрипте, но один шаг за раз ...

Поскольку данные не свернуты (и я новичок в скрипт Google Apps и не может найти какую-либо агрегирование за пределами поворота самой электронной таблицы), я прибегаю к хэшам, чтобы подсчитать количество за год. Я буду делать то же самое за год-группы.

Это может быть не изящно (я тоже не знаком с js), но это имеет смысл для меня. Жаль, что это не работает. Спасибо за указатели.

EDIT 2013-04-25

Пытался получить слишком много сделано в одном сценарии и потерял почву под ногами. Поэтому я взял агрегацию за пределы скрипта, создал новую таблицу и запустил код, найденный здесь https://sites.google.com/site/appsscripttutorial/chart-services/line-chart: получил мою линейную диаграмму.

function doGet(){ 
    // counts by yearmo 
    var ss = SpreadsheetApp.openById('0Atd6tVDA1d3UOI-jfkdlRHbk85Y19BcU9BNFdPNXBlVlE'); 
    var data = ss.getDataRange().getValues(); 
    var yr = []; 
    var mo = []; 
    for (var i = 1; i < data.length; i++) { 
    yr[data[i][0]] = 0; 
    mo[data[i][1]] = 0; 
    } 
    Logger.log(yrLvls = Object.keys(yr)); 
    Logger.log(moLvls = Object.keys(mo)); 
    // initialize hash 
    var yearmo = []; 
    for (var i = 0; i < yrLvls.length; i++){ 
    for (var j = 0; j < moLvls.length; j++){ 
     var key = yrLvls[i] + '-' + moLvls[j] 
     yearmo[ key ] = 0; 
    } 
    } 
    // aggregation 
    for (var i = 1; i < data.length; i++) { 
    yearmo[ data[i][0] + '-' + data[i][1] ] += data[i][3]; 
    } 
    // check 
    var values = Object.keys(yearmo).map(function(key){ 
    return yearmo[key]; 
    }); 
    Logger.log(values); 
    // Year Mo 
    Logger.log("--------------"); 
    var data_yearmo = Charts.newDataTable() 
    .addColumn(Charts.ColumnType.STRING, 'YearMo') 
    .addColumn(Charts.ColumnType.NUMBER, 'Count'); 
    Logger.log(Object.keys(yearmo)); 
    for (key in Object.keys(yearmo)) { 
     Logger.log(key); 
     data_yearmo.addRow( [ key , yearmo[key] ] ); 
    } 
    data_yearmo.build() 

    var lineChart_yearmo = Charts.newLineChart() 
    .setTitle('Counts') 
    .setXAxisTitle('YearMo') 
    .setYAxisTitle('Counts') 
    .setCurveStyle(Charts.CurveStyle.SMOOTH) 
    .setPointStyle(Charts.PointStyle.MEDIUM) 
    .setDataTable(data_yearmo); 

    var uiApp = UiApp.createApplication().setTitle('Yearmo'); 
    uiApp.add(lineChart_yearmo); 
    return uiApp; 
} 
+1

действительно ли это имеет отношение к appengine? –

+0

Я все еще путаюсь с предложениями для написания Google. Снял ярлык. – user2105469

ответ

1

Я подозреваю, что вы не обновили версию приложения, которое вы развернули. Попробуйте использовать ссылку разработки «последний код» (вы можете получить ее из диалогового окна при развертывании приложения), и если это произойдет, создайте новую версию из меню «Управление версиями» и обновите развернутое приложение, чтобы использовать эту версию.

+0

Я сохранил и дал проекту новую версию, затем попробовал «последний код» (развернуть приложение): та же ошибка. – user2105469

+0

Попробуйте просто показать ярлык вместо этого, чтобы посмотреть, показывает ли он –

0

Я забыл добавить .build() к моему звонку Charts.newLineChart().

data_yearmo.build() не является необходимым, но «.build()» для Charts.newLineChart() определенно есть. Кредит переходит к ссылке в Редактировании выше.

Смежные вопросы