2016-01-31 4 views
1

Я пытаюсь создать сценарий с помощью приложения Google Geometra для визуализации. В примере кода на странице Google Developers они используют жестко закодированную таблицу. То, что я хочу сделать, заключается в том, чтобы использовать данные из Google Таблицы, связанные с формой Google. В частности, я хочу использовать данные вкладки «Страны» таблицы электронных таблиц из следующей таблицы: https://docs.google.com/spreadsheets/d/1l77TXctG6mgva1ggs3iR3eBNx949hzn9SiVjki1v59I/edit?usp=sharing.Извлечение данных из таблицы в скрипте: «Таблица данных не определена»

Как-то это не работает, и я получаю сообщения об ошибках, перечисленные ниже.

Как я могу собрать данные из электронной таблицы в нужном формате? Я попытался использовать эту процедуру для сбора данных из электронной таблицы: https://google-developers.appspot.com/chart/interactive/docs/spreadsheets. сообщение

Ошибка на веб-странице:

"Data table is not defined" 

Сообщение об ошибке в Safari консоли:

TypeError: undefined is not an object (evaluating 'new google.visualization.Query’) 
drawChart help:113 
(anonymous function) help:117 

Мой код

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    google.load("visualization", "1", {packages:["geomap"]}); 
    google.setOnLoadCallback(drawMap); 

    function drawMap() { 
    var opts = {sendMethod: 'auto'}; 

    // ***My code*** 
    var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1l77TXctG6mgva1ggs3iR3eBNx949hzn9SiVjki1v59I/edit#gid=957991050', 'sheet=countries', 'headers=1'); 
    var data = query.send(handleQueryResponse); 

    var options = {}; 
    options['dataMode'] = 'regions'; 

    var container = document.getElementById('regions_div'); 
    var geomap = new google.visualization.GeoMap(container); 

    geomap.draw(data, options); 
    }; 

    function handleQueryResponse(response) { 
     if (response.isError()) { 
     alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
     return; 
     } 

     return response.getDataTable(); 
    } 

</script> 

Надеюсь, есть кто-то, кто может помочь мне с этим (надеюсь) не так сложно. Заранее большое спасибо! :-)

ответ

1

Вы можете получить data внутри функции обратного вызова handleQueryResponse

function handleQueryResponse(response) { 
    if (response.isError()) { 
    alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
    } else { 
    var container = document.getElementById('regions_div'); 
    var geomap = new google.visualization.GeoMap(container); 
    var data = response.getDataTable(); 
    geomap.draw(data, options); 
    } 
} 

Google предоставляет пример here.

Также проверьте формат, который вы получите в ответ, и используйте метод google.visualization.arrayToDataTable для форматирования data, как в example, если необходимо, его формат должен быть правильным.

+0

Боюсь, что это не очень помогло мне. Кто-нибудь знает об этом? – 123456654321

+0

Я не мог найти соответствующую документацию, но при запросе электронной таблицы запрос будет выбирать информацию в первом листе. В вашей таблице «записи» - это первый лист, и это тот, который запрашивается. Попробуйте изменить порядок листов, чтобы «страны» были первыми и «записями». Это в дополнение к тому, что сказал Виктор Кукурба. – Gerardo