Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_по созданию ИС с помощью RoR_2018.docx
Скачиваний:
9
Добавлен:
17.06.2023
Размер:
12.5 Mб
Скачать

7 Экспорт отчетов

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

  1. Откройте файл контроллера Pop_hobby. Путь /app/controllers/pop_hobby_controller.rb. Вставьте ниже приведенный код, в метод index (Рисунок 7.1):

respond_to do |format|

format.html

format.xls

end

Рисунок7.1 – Файлpop_hobby_controller.rb

  1. Вставьте ссылку для скачивания отчета в файл представления /app/views/pop_hobby/index.html.erb(Рисунок 7.2):

<%= link_to 'Скачать Excel', 'http://localhost:3000/pop_hobby/index.xls', data: { confirm: "Скачать файл?" } %>

Рисунок 7.2 – Файлindex.html.rbотчета «Популярность хобби»

Не забывайте сохранять файлы при изменении.

  1. Теперь необходимо создать шаблон для экспорта с помощью разметки xml. Создайте новый файл в проекте SublimeTextв папке pop_hobby (Рисунок 7.3):

Рисунок 7.3 – Пример создания нового файла

Напишите в него код:

<?xml version="1.0" encoding="UTF-8"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:o="urn:schemas-microsoft-com:office:office"

xmlns:x="urn:schemas-microsoft-com:office:excel"

xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:html="http://www.w3.org/TR/REC-html40">

<Worksheet ss:Name="Sheet1">

<Table>

<Row>

<Cell><Data ss:Type="String">Код</Data></Cell>

<Cell><Data ss:Type="String">Хобби</Data></Cell>

<Cell><Data ss:Type="String">Число увлеченных</Data></Cell>

</Row>

<%= Hobby.find_each do |hobby| %>

<Row>

<Cell><Data ss:Type="Number"><%= hobby.id %></Data></Cell>

<Cell><Data ss:Type="String"><%= hobby.h_name %></Data></Cell>

<Cell><Data ss:Type="Number"><%= HobbySotr.where(hobby_id: hobby.id).count %></Data></Cell>

</Row>

<% end %>

</Table>

</Worksheet>

</Workbook>

Сохраните файл под названием index.xls.erb.

  1. Осталось добавить новый тип данных в rails. Дляоткройтефайл /config/initializers/mime_types.rb и вставьте в него строку кода:

Mime::Type.register "application/xls", :xls

Сохраните файл и все готово.

Важно! После занесения нового типа сервер нужно перезапустить. В нашем случае остановить его работу Ctrl+Си запустить заново.

Проверьте работу. Откройте отчет «Популярность хобби» и попробуйте его скачать.

  1. Проделайте аналогичные действия для отчета «Увлеченность хобби». Шаблон xmlпредставлен ниже. Не забудьте в ссылке на скачивание файлав пути поменять pop_hobbyна uvl_hobby. Добавлять тип данных xlsкак в четвертом шаге второй раз не надо. Код шаблона:

<?xml version="1.0" encoding="UTF-8"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:o="urn:schemas-microsoft-com:office:office"

xmlns:x="urn:schemas-microsoft-com:office:excel"

xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:html="http://www.w3.org/TR/REC-html40">

<Worksheet ss:Name="Sheet1">

<Table>

<Row>

<Cell><Data ss:Type="String">Код</Data></Cell>

<Cell><Data ss:Type="String">Фамилия</Data></Cell>

<Cell><Data ss:Type="String">Имя</Data></Cell>

<Cell><Data ss:Type="String">Отчество</Data></Cell>

<Cell><Data ss:Type="String">Число хобби</Data></Cell>

</Row>

<%= Sotr.find_each do |sotr| %>

<Row>

<Cell><Data ss:Type="Number"><%= sotr.id %></Data></Cell>

<Cell><Data ss:Type="String"><%= sotr.s_fam %></Data></Cell>

<Cell><Data ss:Type="String"><%= sotr.s_name %></Data></Cell>

<Cell><Data ss:Type="String"><%= sotr.s_otch %></Data></Cell>

<Cell><Data ss:Type="Number"><%= HobbySotr.where(sotr_id: sotr.id).count %></Data></Cell>

</Row>

<% end %>

</Table>

</Worksheet>

</Workbook>