Статьи

Интерактивные диаграммы JavaScript с использованием данных из Google Sheets

Эта статья была рецензирована Джеффом Смитом . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Познакомься с моей подругой Дженни. Недавно она начала кодировать сайты. Она любила свою работу и была очень счастлива, пока не встретила Стива, который имеет репутацию, скажем, не очень легкого клиента.

У Стива было много данных в электронной таблице, и он хотел показать это на своем веб-сайте. Наш друг (теперь Дженни тоже ваш друг!) Предложил Стиву составить диаграммы в Excel и загрузить их в виде изображений на сайт.

Но Стив, будучи Стивом, хотел, чтобы графики были интерактивными. Мало того, он также хотел, чтобы графики обновлялись всякий раз, когда он вносил изменения в данные в своей электронной таблице.

Дженни не знала, как решить эту проблему, поэтому пришла ко мне. И, будучи хорошим другом, я дал ей такой совет:

Сначала попросите вашего клиента перенести его данные в Google Sheets (потому что именно этим сейчас занимаются все крутые люди). Тогда мы сможем легко реализовать необходимые ему функции — интерактивные диаграммы JavaScript и динамическое обновление.

Ее клиент согласился (к счастью!), И Дженни и я закодировали остальную часть решения. Но как? Это то, чему вас научит этот урок.

Я разделил этот урок на пять простых шагов:

  1. Экспорт данных из Google Sheets
  2. Извлечение JSON из Google Sheets через Ajax
  3. Реструктуризация данных
  4. Создание диаграммы с помощью FusionCharts.
  5. Настройка диаграммы

Так что без дальнейших церемоний, давайте погрузимся в!

Экспорт данных Google Sheets в формате JSON

Прежде чем углубляться в экспорт данных, давайте сначала создадим лист. Предполагая, что у вас есть учетная запись Google, вы можете сделать это, перейдя на страницу Google Sheets и нажав кнопку « Запустить новую таблицу» . В открывшейся электронной таблице создайте два столбца: Actor и Income . Затем заполните свой недавно созданный лист некоторыми данными. Я взял мой отсюда: самые высокооплачиваемые актеры в мире 2015 .

Как видите, левый столбец содержит метки для нашего графика, а правый — значения, соответствующие этим меткам. Для тех из вас, кто следует дома, вы можете взять копию этого листа здесь (перейдите в Файл > Сделать копию ).

Данные, доступные в Google Sheets, могут быть экспортированы в несколько форматов, таких как JSON, XML и т. Д. А после экспорта в любой из этих форматов к ним можно легко получить доступ через Интернет.

Чтобы открыть документ в Интернете, необходимо внести следующие изменения в настройки документа:

  • Установите для общего доступа к документу значение « Публичный в Интернете» или « Любой, у кого есть ссылка» . Для этого нажмите кнопку « Поделиться» в верхнем правом углу, а затем выберите параметр « Дополнительно», который отображается в правом нижнем углу всплывающего окна.
  • Опубликовать документ в Интернете. Этот параметр доступен в меню « Файл» > « Опубликовать в Интернете».

После внесения этих двух изменений данные в документе могут быть доступны в формате JSON по адресу: https://spreadsheets.google.com/feeds/list/SPREADSHEET/od6/public/basic?alt=json.

Вам нужно заменить SPREADSHEET идентификатором вашего Google Sheet, который в нашем случае равен 1Aoz_GcPYoEIMMNd1N_meYNOp8TJ0fCXpp1AoUhCpwZo . Вы можете увидеть результаты здесь .

Использование jQuery для получения JSON из Google Sheets

Мы будем использовать метод get () jQuery для извлечения данных из Google Sheets. Вы можете включить jQuery из CDN, как показано ниже:

 <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 

С добавленным тегом <script> вызовите $.get созданного нами URL-адреса электронной таблицы.

 var spreadsheetId = "1Aoz_GcPYoEIMMNd1N_meYNOp8TJ0fCXpp1AoUhCpwZo", url = "https://spreadsheets.google.com/feeds/list/" + spreadsheetId + "/od6/public/basic?alt=json"; $.get({ url: url, success: function(response) { console.log(response); } }); 

Приведенный выше код jQuery отправляет Ajax-запрос к URL-адресу Google Sheets, а после успешного извлечения данных вызывает функцию success . Эта функция регистрирует данные, возвращенные с сервера на консоль. Я бы посоветовал вам запустить этот скрипт и уделить минутку, чтобы изучить, что именно возвращается.

Реструктуризация данных

Данные JSON из Google Sheets должны быть немного реструктурированы, чтобы соответствовать формату данных, принятому нашей библиотекой визуализации. Для этого урока мы будем использовать FusionCharts .

FusionCharts принимает данные JSON в виде массива объектов, содержащих ключи label и value . Вот как это выглядит:

 [{ "label": "Robert Downey Jr.", "value": "80" } ...] 

Чтобы достичь этого, нам нужно запустить следующий фрагмент кода в success вызове success функции get jQuery, которую мы определили ранее.

 var data = response.feed.entry, len = data.length, i = 0, parsedData = []; for (i = 0; i < len; i++) { parsedData.push({ label: data[i].title.$t, value: data[i].content.$t.replace('Income: ', '') }); } 

Здесь мы выполняем итерацию по каждому объекту данных Google Sheet, присутствующему в response.feed.entry и извлекаем из него label и value . Затем мы сохраняем их в новом массиве parsedData , который будет использоваться диаграммой.

label доступна в ключе title.$t а значение доступно в ключе content.$t объекта данных. Однако значение содержит имя столбца листа, которое не является необходимым, поэтому мы удаляем его. Остальные данные в Google Sheet не нужны для визуализации.

Массив parsedData теперь содержит данные в формате, который будет понят FusionCharts, и мы можем продолжить создание визуализации.

Шаг 3: Создание диаграммы

Теперь, когда наши данные готовы и доступны, мы можем перейти к созданию диаграмм. Создание диаграммы включает в себя следующие шаги:

  • Создание <div> внутри которого будет отображаться диаграмма.
  • Создание экземпляра FusionCharts с использованием проанализированных данных из Google Sheet.
  • Вызов метода render для экземпляра FusionCharts для его рендеринга в div .

В разметку мы включаем библиотеку FusionCharts через CDN:

 <script src="http://static.fusioncharts.com/code/latest/fusioncharts.js"></script> 

А также содержащий элемент для диаграммы. Это может содержать некоторый текст заполнителя, который будет отображаться перед визуализацией диаграммы.

 <div id="chart-container"> <p>The chart will render here!</p> </div> 

Чтобы фактически создать и отобразить базовую горизонтальную гистограмму в #chart-container , мы добавим следующий код к success вызову success :

 new FusionCharts({ type: 'bar2d', renderAt: 'chart-container', width: '100%', height: '300', dataFormat: 'json', dataSource: { "chart": { "caption": "Highest Paid Actors", "yAxisName": "Annual Income (in milion USD)", "numberPrefix": "$" }, "data": parsedData } }).render(); 

Давайте посмотрим на некоторые параметры конфигурации, которые мы определили для диаграммы:

  • type : определяет тип диаграммы, которую мы собираемся построить — в этом примере bar2d .
  • height : высота графика в пикселях.
  • width : ширина графика.
  • chart : здесь мы можем установить такие вещи, как заголовок, метки для обеих осей, префикс значения и т. д.
  • data : данные, из которых будет построен график.

И вот демонстрация того, что у нас так далеко:

Настройка диаграммы

Хотя приведенная выше демонстрация работает, она выглядит, возможно, немного общей. К счастью, вы можете настроить практически каждый аспект внешнего вида диаграммы. У FusionCharts есть отличная документация , которую я предлагаю вам проверить.

Вот тот же график, настроенный так, чтобы он выглядел немного более, хм, привлекательно.

Вывод

Как вы уже видели, создать живой график из Google Sheets не так сложно. Живые JavaScript-диаграммы также можно создавать для сложных типов диаграмм, таких как многосерийные диаграммы. Единственное, что нужно проработать для сложных диаграмм, — это как реструктурировать данные из Google Sheets в формат, принятый диаграммой. Все остальное остается прежним.

PS: я буду болтаться в разделе комментариев ниже. Так что не стесняйтесь задавать любые вопросы об этом уроке. Я более чем рад помочь!