Программа для формирования отчетов в excel

  • Надстройка PastePictures для MS Excel: общие сведения

    Предназначение программы: вставка изображений в таблицу Excel, поиск картинок в папке или в Google, экспорт картинок из таблицы в папку.
    Основные функции программы:

    вставка фото из папки (поиск по имени файла)
    вставка картинок по ссылкам из таблицы
    поиск изображений в гугл по данным с листа Excel
    экспорт изображений с листа в файлы…

  • Логотип надстройки Unification

    Программа «Прайс лист», выполненная в виде надстройки для Excel, позволяет легко автоматизировать обработку прайс-листов.
    Вспомните ситуацию: поставщики в очередной раз прислали свои прайс-листы в Excel — конечно, в совершенно разных форматах — и вам нужно объединить данные из всех этих файлов в одну таблицу. А составители этих таблиц будто специально хотели усложнить вам жизнь…

  • Сравнение столбцов в Excel, и подстановка значений в таблицу

    Программа предназначена для сравнения и подстановки значений в таблицах Excel.
    Если вам надо сравнить 2 таблицы (по одному столбцу, или по нескольким),
    и для совпадающих строк скопировать значения выбранных столбцов из одной таблицы в другую,
    надстройка «Lookup» поможет сделать это нажатием одной кнопки.
     
    То же самое можно сделать при помощи формулы =ВПР(), но:

    формулы…

  • Скриншот программы создания этикеток, наклеек, ценников и квитанций


    Программа предназначена для создания и печати этикеток, наклеек, ценников и квитанций на основании данных в таблице Excel.

    При помощи этой программы вы можете:

    распечатать ценники на товар, взяв данные из прайс-листа

    сформировать этикетки и наклейки для заданных строк вашей таблицы

    подготовить квитанции для оплаты услуг ЖКХ (счета за водоснабжение, канализацию, электроэнергию)…

  • Скриншот программы формирования договоров купли-продажи


    Программа предназначена для формирования (заполнения) договоров купли-продажи.
     
    Исходными данными выступает таблица сделок, и шаблон договора, в который при помощи формул подставляются значения из заданной строки таблицы сделок.
    Для запуска программы достаточно нажать зеленую кнопку — и сразу же начнётся формирование договоров (файлов Excel из одного листа) в автоматически созданной папке…

  • Данный макрос предназначен для поиска адресов электронной почты на листе Excel, с последующим выводом найденных адресов на отдельный лист.
    В прикреплённом файле, на первом листе («исходные данные»), ячейки заполнены неструктурированной информацией (смесь фамилий, адресов почты, прочей ненужной информации)
    Макрос вычленяет из текста ячеек адреса электронной почты, и выводит все найденные…

  • Скриншот надстройки поиска по всем листам Excel


    Надстройка SearchText предназначена для поиска заданного текста в книге Excel, с выводом результатов поиска на отдельный лист.
     
    При запуске надстройка формирует панель инструментов, с которой осуществляется запуск всех макросов:

    В Excel 2007 и 2010 панель инструментов можно найти на вкладке «Надстройки»:

    Надстройка SearchText является расширенной версией надстройки для…

  • Скриншот программы сравнения прайс-листов Excel


    Программа предназначена для сравнения цен конкурентов из их прайсов с прайс-листом вашей организации.

    ВНИМАНИЕ: Недавно разработана многофункциональная программа для обработки прайс-листов

    Новая программа объединения и обработки прайс-листов доступна на сайте для скачивания и тестирования на различных наборах прайс-листов.

    Исходными данными для программы являются:

    ваш прайс…

  • К примеру, есть у вас несколько десятков (или сотен) текстовых файлов с подобным содержимым:
    (количество файлов, и количество строк данных в каждом файле не ограничено)
    1c04;1J0-698-151-G;1 комплект тормозных накладок;1J0698151G;1J0698151G;5;1
    1c04;1H0698151A;Тормозные колодки;1H0698151A;1H0698151A;1;1
    1c04;1K0-698-151-B;Тормозные колодки;1K0698151B;1K0698151B;2;1
    А надо из всего этого…

  • Главное меню программы по работе с базой данных «Преподаватели»


    База данных «Преподаватели» предназначена для автоматизации работы администрации учебных заведений.

    Программа обеспечивает выполнение всех необходимых операций по приему документов, поиску и анализу информации, составлению отчетов.

    Эта база данных представляюет собой урезанную и немного изменённую версию программы АИСС СПК.

    Программа обеспечивает:

    Хранение полной…

  • Скриншот результатов поиска с выводом на отдельный лист


    Надстройка SearchExcel предназначена для поиска заданного текста во всех столбцах текущего листа Excel, с выводом результатов поиска на отдельный лист.
     
    При запуске надстройка формирует панель инструментов, с которой осуществляется запуск всех макросов:

    Надстройка SearchExcel является упрощённой версией надстройки для поиска на всех листах книги Excel
    Смотрите также надстройку для…

  • Создание списка файлов из папки со значениями ячеек из этих файлов

    Макрос FilenamesWithValues предназначен для получения списка файлов Excel из заданной папки, и загрузки значений из каждого найденного файла.
    В отдельной ячейке задаётся путь к папке, которая будет просмотрена в поисках файлов Excel.
    При формировании списка файлов проставляются гиперссылки на найденные файлы, указывается дата создания файла.
    Из каждого файла загружаются значения с…

  • Форма редактирования и просмотра заказа


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

    Основные функции программы:

    создание (заполнение) новых заказов

    редактирование существующих заказов

    объединение нескольких заказов в один

    формирование заявки на продукцию на основании данных их сформированных заказов

    Для каждого заказа предусмотрен выбор клиента из базы данных (если клиент…

  • АИСС "Абитуриент" - форма ввода данных абитуриента


    Программа АИСС «СПК» предназначена для автоматизации работы приемной комиссии колледжей и техникумов.

    АИСС обеспечивает выполнение всех необходимых операций по приему документов, поиску и анализу информации, составлению отчетов.

    Назначением программы является автоматизация труда работника приёмной комиссии учебного заведения.

    Программа обеспечивает:

    Хранение полной…

  • Результат объединения данных из файлов Excel


    Программа предназначена для загрузки списка товаров из актов о приеме-передаче основных средств.
    Поддерживаются акты по формам № ОС-3.1 и № ОС-3.3, возможно добавить поддержку актов других форм (в формате Excel).
    При запуске макроса, выводится диалоговое окно выбора папки, после чего, в выбранной папке, производится поиск всех файлов Excel.
    Для каждого из найденных файлов Excel, программа…

  • Поиск трасс и просмотр ресурсов оборудования


    Программный комплекс, предназначенный для автоматизации учёта и администрирования сети связи телефонной или телекоммуникационной компании.

    Программа позволяет хранить и редактировать базу данных объектов (в виде файлов Excel), просматривать существующие трассы и формировать новые.

     

    Особенность программы — возможность учёта и администрирования узлов связи с нестандартными…

  • Форма ввода данных о новом пациенте

    Программа позволяет сформировать отчёты по базе данных больницы.
    Кроме того, реализован ввод данных в базу о новых пациентах.

     

  • Панель инструментов программы обработки телефонных номеров


    Программа предназначена для обработки объявлений о продаже недвижимости.
     

    Основная задача программы — обработка списка телефоннных номеров из объявлений, с целью фильтрации этого списка.
    Это позволяет выделить объявления от частных лиц,
    удалив из общего списка предложения от агенств недвижимости.
     
    Программа умеет:

    разносить номера из ячеек по разным столбцам или строкам…

  • Форма подбора соответствия для модели ноутбука


    Программа предназначена для формирования прайс-листов на ноутбуки с соответствии с требованиями интернет-каталога Onliner.by

    Основные функции программы:

    (учитываются цены фирм-конкурентов, цены onliner.by и надбавка фирмы)

    загрузка каталога ноутбуков (названия, характеристики, цены) с сайта onliner.by в файл Excel, и обновление этого каталога

    назначение соответствий моделей…

  • Составление расписания занятий в Excel


    Программа предназначена для составления учебного расписания.
    На отдельных листах хранится список преподавателей вуза, список групп и занятий у этих групп по дням недели.
    Макрос делает выборку по всем преподавателям (или по выбранному преподавателю),
    фильтрует по заданной группе (курсу), если не выбрана опция «все курсы»,
    сортирует по времени начала занятия, группирует по дню…

  • Скриншот формы поиска файлов в заданной папке


    Надстройка, позволяющая загрузить из выбранной папки список файлов на лист Excel.
    Автор: VictorM

    Особенности надстройки:

    задаваемая пользователем глубина поиска в подпапках

    простановка гиперссылок на листе Excel на найденные файлы

    вывод дополнительных характеристик файла

    (размер файла, дата создания файла, полный путь)

    изменяемая маска поиска (поиск по части имени файла, по…

  • Результат формирования задания на производство

    Программа предназначена для формирования заданий на производство.
    Исходными данными выступают таблицы Excel и файлы XML.
    При конвертации таблиц происходит обработка данных и перестановка столбцов.
    При запуске программа формирует панель инструментов с 6 кнопками — для обработки файлов различной структуры.

  • Вид объединённого прайс-листа автозапчастей


    Программа предназначена для формирования единого прайс-листа автозапчастей на основании нескольких исходных прайсов различной структуры.

    ВНИМАНИЕ: Описанная в данной статье программа послужила прототипом для новой, многофункциональной программы, где пользователь сам может настраивать обработку прайс-листов

    Новая программа объединения и обработки прайс-листов доступна на сайте для…

  • Результат обработки объявлений - таблица на листе Excel

    Программа предназначена для преобразования файлов формата .HTM с объявлениями о продаже недвижимости (файлы являются результатом сохранения веб-страниц с сайтов публикации объявлений) в формат Microsoft Excel.
    Программа производит анализ текста объвлений, распознаёт значения площади и этажности, отделяет второстепенные данные (комментарий) из текста объявления, преобразует различные форматы цен (…

  • Скриншот заголовка таблицы заказов из интернет-магазина, загруженных из писем в Outlook


    Программа анализирует поступившие заказы с интернет-магазина (письма в программе Outlook), извлекает необходимые данные из писем (в формате HTML), и формирует сводную таблицу заказов
     
    Файл программы состоит из 2 листов — на первом листе находятся кнопки запуска, на втором — шаблон создаваемой сводной таблицы заказов.
     

    Принцип работы программы:

    при нажатии зеленой кнопки,…

  • Программное формирование оглавления Книги заявок


    Программа предназначена для работы с заявками на оборудование.

    Цели программы:

    автоматизация составления и редактирования заявок

    преобразование имеющихся заявок в виде отдельных файлов Excel различной структуры к единому виду

    формирование отчётов по категориям и типам заявок

    стандартизация печатной формы заявок

    разграничение доступа на работу с базой данных заявок

     …

  • Получение длительности медиафайла формулой Excel


    Узнать продолжительность (время) звучания аудиофайла (MP3, WAV и т.д.), или длительность видеофайла (видеоролика) из Excel совсем несложно.
    Используйте функцию ПродолжительностьМедиафайла:
    (функцию можно использовать как в макросах, так и на листе Excel)
    Sub Пример_Использования_Функции_ПродолжительностьМедиафайла()
    Путь = «E:MusicMODERN_TALKING With_a_little_love.mp3″…

  • Данные с сайта superjob.ru, загужаемые в таблицу Excel


    Программа предназначена для импорта данных о соискателях с сайта superjob.ru
    В качестве исходных данных для макроса, используется ссылка на результат поиска на сайте superjob.ru
    (которую можно получить, забив искомый текст в строке поиска сайта, и скопировав URL страницы результатов поиска из адресной строки браузера).
    Во время выполнения кода, происходит авторизация на сайте путем…

  • Формирование отчётов по предприятиям нефтегазодобывающей промышленности


    Программа предназначена для сбора данных из отчётов нефтедобывающих компаний.
     
    Исходными данными выступают файлы оперативной отчётности следующих типов:

    Добыча

    Переработка

    Сбыт

    Сервис

    Анализ

    На распределение

     
    Во втором столбце таблицы перечислены названия компаний, чьи отчеты программа будет обрабатывать,
    а в строке заголовка — список месяцев, данные по по…

  • Форма выбора мероприятий для формирования отчёта


    Программа предназначена для вывода отчёта по мероприятиям налоговой инспекции.
     

    Исходные данные для обработки расположены на других листах того же файла Excel: 

    перечень мероприятий налогового контроля, проведенных в отношении контрагентов

    поручения об истребовании документов (информации)

    запросы в кредитные организации о предоставлении сведений по операциям на счетах…

  • Скриншот программы загрузки номеров телефонов с сайта объявлений abw.by


    Программа собирает в таблицу Excel номера телефонов из объявлений на сайте abw.by
    В ячейке листа Excel указывается количество дней, за которые будут обрабатываться объявления с сайта.
    (если указано 0 дней — обрабатываются только объявления за сегодняшнюю дату, если 1 день — сегодняшние и вчерашние, и т.д.
    Количество дней неограничено — влияет только на время загрузки данных)
    В каждом…

  • Вид программно создаваемой сводной таблицы и диаграммы


    Макрос предназначен для создания сводной таблицы и диаграммы для отчёта по трафику.

    В качестве исходных данных выступает таблица со статистикой доступа в интернет — сформированная программой создания отчётов по статистике

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

    При…

  • Скриншот таблицы Excel со списком папок и подпапок


    Макрос предназначен для загрузки в Excel списка подпапок заданной папки
    Для каждой из найденных папок производится поиск всех подпапок, и для каждой подпапки из списка выводится необходимая информация (в частности, количество файлов и подпапок, а также размер папки в байтах)
    Для всех ячеек с названиями папок и подпапок макрос проставляет гиперссылки, позволяющие быстро получить доступ к нужному…

  • Форма ввода записей в базу данных в Excel


    Данная программа предназначена для ввода данных о заказе и сортировки заказов по группам.

    Программа представляет собой шаблон Excel для создания, сортировки и сведения в общую таблицу, заказов различных категорий.
    (категории можно менять вручную на отдельном листе).
    Сотрудник регистрирует своё имя, выбирая его из выпадающего списка, а после выбора ФИО, в соседние поля подтягивается…

  • Отчёт по ликвидности портфелей ценных бумаг


    Программа предназначена для обработки отчётов управления по сделкам с ценными бумагами

    Основные функции программы:

    Создание новых отчётов управления (за следующий квартал) на основании текущих отчётов

    Внесение изменений и дополнений в существующие отчёты

    Формирование сводной таблицы по вкладам для оценки роста, а также коэффициентов ликвидности и версификации вкладов

    Обработка…

  • Промежуточные результаты отработки котировок

    Результат загрузки котировок из внешних файлов

    Программа позволяет загружать котировки различных валют из файлов формата .HTM, и анализировать их при различных параметрах анализа.
    Все котировки разбиваются на отдельные блоки (временные диапазоны для разбивки задаются на форме настроек), и анализ производится по каждому блоку в отдельности.
    Есть возможность исключить из расчётов данные за пятницу.
    Изменение параметров вычисления значений BS…

  • Пример обрабатываемого текстового файла, содержащего данные о компьютере


    Программа предназначена для выборки данных из текстовых файлов, которые были сгенерированны инвентаризационной программой
    В качестве исходных данных для макроса используются текстовые файлы, в которых находится информация о конфигурации компьютеров
    (на каждый компьютер приходится по 3 файла).
    Работу макроса можно разделить на следующие этапы:

    Выбор папки с данными по всем компьютерам…

  • Форма выбора параметров запроса статистики


    Программа позволяет формировать отчёты по трафику на основании данных биллинговой системы.

    В качестве исходных данных программа принимает:

    логин абонента

    дату начала и окончания периода сбора статистики

     

    Особенности программы:

    формирование отчётов по всему трафику, или только по оплачиваемому

    создание листа итогов с диаграммой (сразу видно, с какого сайта был…

  • Скриншот формируемого отчёта с характеристиками серверов


    Программа предназначена для формирования отчёта по серверам компании (список технических характеристик, IP адресов, установленного программного обеспечения)
    В качестве исходных данных для программы имеется выгрузка из Help Desk системы Acme в формате XLS, но этот отчёт, хоть и содержит все необходимые данные, крайне неудобен для анализа и дальнейшей обработки:

    Программа производит поиск…

  • Скриншот программы поиска и объединения файлов


    Программа предназначена для объединения однотипных файлов в единый сводный файл.
    Перед запуском программы требуется выбрать папку, содержащую файлы смет.
    При запуске программа загружает из выбранной папки список файлов, соответствующих заданной маске,
    и для каждого имени файла, заданного в первом столбце ли листе запуска, подбирает подходящий по имени файл.
    Если для какого-то из номеров смет не…

  • Процесс анализа рисков инвестиционных проектов


    Программа предназначена для анализа ожидаемой доходности различных портфелей

    (рассматриваются всевозможные комбинации проектов)

    При помощи формул типа =СЛЧИС() на листах с характеристиками проектов генерируются различные комбинации исходных значений, на основании которых формулами рассчитывается доходность проекта.

    Методом Монте-Карло формируются массивы значений (по одному массиву для…

  • Настройка шаблона писем для рассылки детализации звонков


    Программа предназначена для создания отчётов по детализации телефонных звонков (междугородная и международная связь), последующей упаковки созданных детализаций в ZIP архив, и автоматизированной рассылки сформированных писем абонентам.
    При запуске программа ищет в заданной папке исходные файлы с детализацией (упакованные в ZIP файлы DBF), и на основании из этих файлов формирует (по шаблону, с…

  • Запуск формирования списков игр

    Таблица "Полные данные ставок"

    Программа позволяет сформировать списки игр, отсортированные по различным критериям.
    На основании результатов программы букмекеры могут правильно выстроить «линию», то есть, учитывая массу нюансов, с достаточной долей вероятности определить фаворитов и аутсайдеров в предстоящих играх, и сделать выгодные ставки.

  • Скриншот листа коммерческого предложения - описание, фото и карта рекламной конструкции


    Программа предназначена для формирования коммерческих предложений по наружной рекламе.
    В качестве исходных данных выступает файл Excel со списком рекламных объектов.

    Список объектов должен содержать следующую информацию (в отдельных столбцах):

    адрес рекламной конструкции (щита)

    сторона рекламного щита или перетяжки (А, Б, В, и т.п.)

    ссылки на фото и карту рекламной конструкции
    (…

  • Форма вывода результатов проверки на совпадения

    Программа позволяет в процессе ввода новых данных в таблицу Excel отслеживать наличие совпадений с записями из «черного списка», расположенного на отдельном листе.
     

    Особенности данной программы:

    поиск частичных совпадений (адреса могут совпадать лишь частично, при сравнении файмилий не учитываются 2 последних буквы, и т.д.)
    можно изменить «точность» совпадения — в…

  • Пример созданного оглавления прайс-листов отелей


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

    При запуске программа формирует панель инструментов:

    Особенности программы:

    группировка строк каждого прайс-листа

    формирование обратных ссылок с прайс-листов на оглавление

     

Чтобы оперативно мониторить и своевременно влиять на динамику реализации продукции, коммерческой службе требуются аналитические отчеты, в которых раскрываются различные аспекты процесса реализации.

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

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

ИНСТРУМЕНТАРИЙ EXCEL ДЛЯ СОЗДАНИЯ АНАЛИТИЧЕСКИХ ОТЧЕТОВ

В табличном редакторе Excel предусмотрен широкий выбор инструментов, с помощью которых можно создать аналитические отчеты на основе данных о реализации продукции. Для успешной работы с этими инструментами от пользователя требуется определенный уровень подготовки. Представим перечень инструментария для создания аналитических отчетов:

  • продвинутый уровень — макросы, Power BI;
  • хороший уровень — OLAP-кубы, Power Query/Pivot;
  • средний уровень — сводные таблицы, формулы.

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

Макросы

Работа с макросами основана на применении языка программирования VBA, который можно использовать для расширения возможностей MS Excel и других приложений MS Office. С помощью прописанных в макросе команд можно:

  • проводить различные обработки и сортировки данных в файле Excel;
  • получать информацию из других файлов;
  • создавать сводные таблицы;
  • добавлять в создаваемые отчеты дополнительные функции, которые невозможно получить обычными средствами Excel.

Чтобы создавать макросы, пользователь должен отлично знать редактор Excel, владеть языком программирования VBA. Приведу в качестве примера запись макроса, с помощью которого в файле Excel автоматически из массива данных формируется сводная таблица:

Очевидно, что работать с макросами может незначительная часть сотрудников, которые создают отчетность в Excel.

Power BI

Power BI по своей сути является отдельным программным продуктом, в который можно загрузить файлы Excel и произвести дальнейшую обработку с целью анализа и визуализации данных.

Power BI включает в себя весь функционал надстроек Excel (Power Query и Power Pivot плюс улучшенные механизмы визуализации из Power View и Power Map). Преимущества данного инструмента: с отчетами может работать сразу несколько пользователей плюс широкий диапазон визуализации показателей отчетов.

Идет тренд к интеграции Excel c Power BI. Например, в Excel 2019 появилась возможность напрямую загружать данные в функционал Power BI. Для этого в меню выбираем:

Файл > Опубликовать > Опубликовать в Power BI.

Передав файл, нажимаем кнопку «Перейти к Power BI», чтобы просмотреть загруженные данные.

Главные сложности использования Power BI: загруженные таблицы Excel нужно дополнительно обрабатывать для корректного включения их данных в отчеты, а формулы для создания отчетов в этой программе отличаются от формул Excel.

Power BI постоянно развивается, однако на сегодняшний момент использовать его для формирования аналитических отчетов достаточно трудоемко.

OLAP-кубы

OLAP (online analytical processing) — аналитическая технология обработки данных в реальном времени, при которой данные из учетной базы выгружаются в файлы Excel, а затем обрабатываются с помощью другого инструмента Excel (сводных таблиц).

Для начала работы нужно создать подключение файла Excel к данным OLAP-куба (Данные → Получение внешних данных), а затем из открывшегося окна перетащить курсором в табличную часть Excel показатели, которые требуются.

В результате будет получена сводная таблица с отчетными данными. Главное ее преимущество — возможность автоматической актуализации данных при каждом подключении к OLAP-кубу.

Power Query/Pivot

Данные инструменты являются надстройками Excel, поэтому работа с ними происходит непосредственно из меню табличного редактора.

Power Query появился в версии Excel 2013 как отдельная надстройка, требующая подключения, а с версии 2016 г. весь функционал Power Query уже встроен по умолчанию и находится на вкладке «Данные → Получить и преобразовать».

Power Query обладает значительными возможностями для целей создания отчетов. С помощью этой надстройки можно:

  • загружать данные в Excel из почти 40 различных источников, среди которых базы данных (SQL, Oracle, Access, Teradata), корпоративные ERP-системы (SAP, Microsoft Dynamics, 1C), интернет-сервисы;
  • собирать данные из файлов всех основных типов данных (XLSX, TXT, HTML, XM) — поодиночке и сразу из всех файлов указанной папки;
  • зачищать полученные данные от лишних пробелов, столбцов или строк, повторов, служебной информации в заголовках, непечатаемых символов и т. д;
  • трансформировать таблицы Excel, приводя их в желаемый вид (фильтровать, сортировать, менять порядок столбцов, транспонировать, добавлять итоги, разворачивать кросс-таблицы в плоские и сворачивать обратно);
  • подставлять данные из одной таблицы в другую по совпадению одного или нескольких параметров (полностью заменяет формулу ВПР и ее аналоги).

Главная особенность Power Query: все действия по импорту и трансформации данных запоминаются в виде запроса — последовательности шагов на внутреннем языке программирования Power Query, который лаконично называется «М».

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

Power Pivot — надстройка Excel, предназначенная для разнопланового анализа больших объемов данных. Поэтому результат работы с Power Pivot похож на усложненные сводные таблицы.

Общие принципы работы в Power Pivot:

  • внешние данные загружают в Power Pivot, который поддерживает 15 различных источников: распространенные базы данных (SQL, Oracle, Access), файлы Excel, текстовые файлы, веб-каналы данных. Если Power Query использовать как источник данных, то возможности загрузки увеличиваются многократно;
  • между загруженными таблицами настраиваются связи, то есть создается Модель Данных. Это позволит строить отчеты по любым полям из имеющихся таблиц так, будто это одна таблица;
  • при необходимости в Модель Данных добавляют дополнительные вычисления с помощью вычисляемых столбцов (аналог столбца с формулами в «умной» таблице) и мер (аналог вычисляемого поля в сводной таблице). Нужные вычисления записываются на специальном внутреннем языке Power Pivot, который называется DAX (Data Analysis Expressions);
  • на листе Excel по Модели Данных строят интересующие отчеты в виде сводных таблиц и диаграмм.

Сводные таблицы

Первый интерфейс сводных таблиц (сводных отчетов) был включен в состав Excel в 1993 г. (в версии Excel 5.0). Этот инструмент изначально создавался для построения отчетов на основе многомерных данных. Он имеет достаточно широкие функциональные возможности.

Реализованный в Excel инструмент сводных таблиц позволяет расположить измерения многомерных данных в области рабочего листа. Упрощенно можно представлять себе сводную таблицу как отчет, лежащий сверху диапазона ячеек (хотя есть определенная привязка форматов ячеек к полям сводной таблицы).

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

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

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

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

Для работы со сводными таблицами не нужны знания в области программирования VBA или внутренних языков программирования надстроек Excel.

Формулы Excel

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

Формулы отлично подходят для создания двухмерных отчетов при обработке небольшого объема данных. Преимущество формул в том, что их легко копировать или транспонировать на другие ячейки отчетов, переделать или защитить от изменений.

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

ВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ФОРМУЛ ДЛЯ РАЗРАБОТКИ АНАЛИТИКИ ПРОДАЖ В EXCEL

Вне зависимости от выбора инструментария Excel при разработке аналитических отчетов о реализации продукции в первую очередь создают новую книгу и загружают в нее исходные данные из учетной программы компании для последующей их обработки.

Удобнее всего сделать это путем формирования в учетной программе реестра продаж с нужными показателями и сохранения его в виде файла формата Excel. Далее отчетность будем создавать на отдельных листах этого файла.

Возьмем самые востребованные данные о продажах, на основе которых создаются аналитические отчеты:

  • наименование покупателя;
  • наименование продукции;
  •  дата отгрузки продукции покупателю;
  • регион реализации продукции;
  • сумма реализации продукции;
  • валовая прибыль от реализации продукции;
  • маржа (процентное соотношение валовой прибыли к сумме реализации).

Материал публикуется частично. Полностью его можно прочитать в журнале «Планово-экономический отдел» № 10, 2020.


Для анализа больших и сложных таблиц обычно используют

Сводные таблицы

. С помощью формул также можно осуществить группировку и анализ имеющихся данных. Создадим несложные отчеты с помощью формул.

В качестве исходной будем использовать

таблицу в формате EXCEL 2007

(

), содержащую информацию о продажах партий продуктов. В строках таблицы приведены данные о поставке партии продукта и его сбыте. Аналогичная таблица использовалась в статье

Сводные таблицы

.

В таблице имеются столбцы:


  • Товар

    – наименование партии товара, например, «

    Апельсины

    »;

  • Группа

    – группа товара, например, «

    Апельсины

    » входят в группу «

    Фрукты

    »;

  • Дата поставки

    – Дата поставки Товара Поставщиком;

  • Регион продажи

    – Регион, в котором была реализована партия Товара;

  • Продажи

    – Стоимость, по которой удалось реализовать партию Товара;

  • Сбыт

    – срок фактической реализации Товара в Регионе (в днях);

  • Прибыль

    – отметка о том, была ли получена прибыль от реализованной партии Товара.

Через

Диспетчер имен

откорректируем

имя

таблицы на «

Исходная_таблица

» (см.

файл примера

).

С помощью формул создадим 5 несложных отчетов, которые разместим на отдельных листах.

Отчет №1 Суммарные продажи Товаров

Найдем суммарные продажи каждого Товара. Задача решается достаточно просто с помощью функции

СУММЕСЛИ()

, однако само построение отчета требует определенных навыков работы с некоторыми средствами EXCEL.

Итак, приступим. Для начала нам необходимо сформировать перечень названий Товаров. Т.к. в столбце Товар исходной таблицы названия повторяются, то нам нужно из него выбрать только

уникальные

значения. Это можно сделать несколькими способами: формулами (см. статью

Отбор уникальных значений

), через меню

или с помощью

Расширенного фильтра

. Если воспользоваться первым способом, то при добавлении новых Товаров в исходную таблицу, новые названия будут включаться в список автоматически. Но, здесь для простоты воспользуемся вторым способом. Для этого:

  • Перейдите на лист с исходной таблицей;
  • Вызовите

    Расширенный фильтр

    (

    );

  • Заполните поля как показано на рисунке ниже: переключатель установите в позицию

    Скопировать результат в другое место

    ; в поле Исходный диапазон введите $A$4:$A$530; Поставьте флажок

    Только уникальные записи

    .

  • Скопируйте полученный список на лист, в котором будет размещен отчет;
  • Отсортируйте перечень товаров (

    ).

Должен получиться следующий список.

В ячейке

B6

введем нижеследующую формулу, затем скопируем ее

Маркером заполнения

вниз до конца списка:

=СУММЕСЛИ(Исходная_Таблица[Товар];A6;Исходная_Таблица[Продажи])

Для того, чтобы понять сруктурированные ссылки на поля в

таблицах в формате EXCEL 2007

можно почитать Справку EXCEL (клавиша

F1

) в разделе

Основные сведения о листах и таблицах Excel > Использование таблиц Excel

.

Также можно легко подсчитать количество партий каждого Товара:

=СЧЁТЕСЛИ(Исходная_Таблица[Товар];A6)

Отчет №2 Продажи Товаров по Регионам

Найдем суммарные продажи каждого Товара в Регионах. Воспользуемся перечнем Товаров, созданного для Отчета №1. Аналогичным образом получим перечень названий Регионов (в поле Исходный диапазон

Расширенного фильтра

введите $D$4:$D$530). Скопируйте полученный вертикальный диапазон в

Буфер обмена

и

транспонируйте

его в горизонтальный. Полученный диапазон, содержащий названия Регионов, разместите в заголовке отчета.

В ячейке

B

8

введем нижеследующую формулу:

=СУММЕСЛИМН(Исходная_Таблица[Продажи]; Исходная_Таблица[Товар];$A8; Исходная_Таблица[Регион продажи];B$7)

Формула вернет суммарные продажи Товара, название которого размещено в ячейке

А8

, в Регионе из ячейки

В7

. Обратите внимание на использование

смешанной адресации

(ссылки $A8 и B$7), она понадобится при копировании формулы для остальных незаполненных ячеек таблицы.

Скопировать вышеуказанную формулу в ячейки справа с помощью

Маркера заполнения

не получится (это было сделано для Отчета №1), т.к. в этом случае в ячейке

С8

формула будет выглядеть так:

=СУММЕСЛИМН(Исходная_Таблица[Сбыт, дней]; Исходная_Таблица[Группа];$A8; Исходная_Таблица[Продажи];C$7)

Ссылки, согласно правил

относительной адресации

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

B8

, в

Буфер обмена

, затем вставить ее в диапазон

С8:

G

8

, нажав

CTRL

+

V

. В ячейки ниже формулу можно скопировать

Маркером заполнения

.

Отчет №3 Фильтрация Товаров по прибыльности

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

Создадим

Выпадающий (раскрывающийся) список

на основе

Проверки данных

со следующими значениями:

(Все); Да; Нет

. Если будет выбрано значение фильтра

(Все)

, то при расчете продаж будут учтены все записи исходной таблицы. Если будет выбрано значение фильтра «

Да»

, то будут учтены только прибыльные партии Товаров, если будет выбрано «

Нет»

, то только убыточные.

Суммарные продажи подсчитаем следующей

формулой массива

:

=СУММПРОИЗВ((Исходная_Таблица[Группа]=A8)* ЕСЛИ($B$5=»(Все)»;1;(Исходная_Таблица[Прибыль]=$B$5))* Исходная_Таблица[Продажи])

После ввода формулы не забудьте вместо простого нажатия клавиши

ENTER

нажать

CTRL

+

SHIFT

+

ENTER

.

Количество партий по каждой группе Товара, в зависимости от прибыльности, можно подсчитать аналогичной формулой.

=СУММПРОИЗВ((Исходная_Таблица[Группа]=A8)* ЕСЛИ($B$5=»(Все)»;1;(Исходная_Таблица[Прибыль]=$B$5)))

Так будет выглядеть отчет о продажах по Группам Товаров, принесших прибыль.

Выбрав в фильтре значение

Нет

(в ячейке

B

5

), сразу же получим отчет о продажах по Группам Товаров, принесших убытки.

Отчет №4 Статистика сроков сбыта Товаров

Вернемся к исходной таблице. Каждая партия Товара сбывалась определенное количество дней (см. столбец Сбыт в исходной таблице). Необходимо подготовить отчет о количестве партий, которые удалось сбыть за за период от 1 до 10 дней, 11-20 дней; 21-30 и т.д.

Вышеуказанные диапазоны сформируем нехитрыми формулами в столбце

B

.

Количество партий, сбытые за определенный период времени, будем подсчитывать с помощью формулы

ЧАСТОТА()

, которую нужно ввести как

формулу массива

:

=ЧАСТОТА(Исходная_Таблица[Сбыт, дней];A7:A12)

Для ввода формулы выделите диапазон

С6:С12

, затем в

Строке формул

введите вышеуказанную формулу и нажмите

CTRL

+

SHIFT

+

ENTER

.

Этот же результат можно получить с помощью обычной функции

СУММПРОИЗВ()

:

=СУММПРОИЗВ((Исходная_Таблица[Сбыт, дней]>A6)* (Исходная_Таблица[Сбыт, дней]<=A7))

Отчет №5 Статистика поставок Товаров

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

=МИН(Исходная_Таблица[Дата поставки])

Создадим перечень дат —

первых дней месяцев

, начиная с самой ранней даты поставки. Для этого воспользуемся формулой:

=КОНМЕСЯЦА($C$5;-1)+1

В результате получим перечень дат — первых дней месяцев:

Применив соответствующий формат ячеек, изменим отображение дат:

Формула для подсчета количества поставленных партий Товаров за месяц:

=СУММПРОИЗВ((Исходная_Таблица[Дата поставки]>=B9)* (Исходная_Таблица[Дата поставки]

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

ГОД()

.

Теперь для вывода

промежуточных итогов

по годам создадим структуру через пункт меню

:

  • Выделите любую ячейку модифицированной таблицы;
  • Вызовите окно

    Промежуточные итоги

    через пункт меню

    ;

  • Заполните поля как показано на рисунке:

После нажатия ОК, таблица будет изменена следующим образом:

Будут созданы промежуточные итоги по годам. Нажатием маленьких кнопочек в левом верхнем углу листа можно управлять отображением данных в таблице.


Резюме

:

Отчеты, аналогичные созданным, можно сделать, естественно, с помощью

Сводных таблиц

или с применением

Фильтра

к исходной таблице или с помощью других функций

БДСУММ()

,

БИЗВЛЕЧЬ()

,

БСЧЁТ()

и др. Выбор подхода зависит конкретной ситуации.

#Руководства

  • 13 май 2022

  • 0

Как систематизировать тысячи строк и преобразовать их в наглядный отчёт за несколько минут? Разбираемся на примере с квартальными продажами автосалона

Иллюстрация: Meery Mary для Skillbox Media

Ксеня Шестак

Рассказывает просто о сложных вещах из мира бизнеса и управления. До редактуры — пять лет в банке и три — в оценке имущества. Разбирается в Excel, финансах и корпоративной жизни.

Сводная таблица — инструмент для анализа данных в Excel. Она собирает информацию из обычных таблиц, обрабатывает её, группирует в блоки, проводит необходимые вычисления и показывает итог в виде наглядного отчёта. При этом все параметры этого отчёта пользователь может настроить под себя и свои потребности.

Разберёмся, для чего нужны сводные таблицы. На конкретном примере покажем, как их создать, настроить и использовать. В конце расскажем, можно ли делать сводные таблицы в «Google Таблицах».

Сводные таблицы удобно применять, когда нужно сформировать отчёт на основе большого объёма информации. Они суммируют значения, расположенные не по порядку, группируют данные из разных участков исходной таблицы в одном месте и сами проводят дополнительные расчёты.

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

Разберём на примере. Представьте небольшой автосалон, в котором работают три менеджера по продажам. В течение квартала данные об их продажах собирались в обычную таблицу: модель автомобиля, его характеристики, цена, дата продажи и ФИО продавца.

Таблица, в которой хранятся данные о продажах автосалона
Скриншот: Skillbox Media

В конце квартала планируется выдача премий. Нужно проанализировать, кто принёс больше прибыли салону. Для этого нужно сгруппировать все проданные автомобили под каждым менеджером, рассчитать суммы продаж и определить итоговый процент продаж за квартал.

Разберёмся пошагово, как это сделать с помощью сводной таблицы.


Создаём сводную таблицу

Чтобы сводная таблица сработала корректно, важно соблюсти несколько требований к исходной:

  • у каждого столбца исходной таблицы есть заголовок;
  • в каждом столбце применяется только один формат — текст, число, дата;
  • нет пустых ячеек и строк.

Теперь переходим во вкладку «Вставка» и нажимаем на кнопку «Сводная таблица».

Жмём сюда, чтобы создать сводную таблицу
Скриншот: Skillbox Media

Появляется диалоговое окно. В нём нужно заполнить два значения:

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

В нашем случае выделяем весь диапазон таблицы продаж вместе с шапкой. И выбираем «Новый лист» для размещения сводной таблицы — так будет проще перемещаться между исходными данными и сводным отчётом. Жмём «Ок».

Выделяем диапазон исходной таблицы и отмечаем лист, где разместится сводная
Скриншот: Skillbox Media

Excel создал новый лист. Для удобства можно сразу переименовать его.

Слева на листе расположена область, где появится сводная таблица после настроек. Справа — панель «Поля сводной таблицы», в которые мы будем эти настройки вносить. В следующем шаге разберёмся, как пользоваться этой панелью.

Появился новый лист для сводной таблицы
Скриншот: Skillbox Media

Настраиваем сводную таблицу и получаем результат

В верхней части панели настроек находится блок с перечнем возможных полей сводной таблицы. Поля взяты из заголовков столбцов исходной таблицы: в нашем случае это «Марка, модель», «Цвет», «Год выпуска», «Объём», «Цена», «Дата продажи», «Продавец».

Нижняя часть панели настроек состоит из четырёх областей — «Значения», «Строки», «Столбцы» и «Фильтры». У каждой области своя функция:

  • «Значения» — проводит вычисления на основе выбранных данных из исходной таблицы и относит результаты в сводную таблицу. По умолчанию Excel суммирует выбранные данные, но можно выбрать другие действия. Например, рассчитать среднее, показать минимум или максимум, перемножить.

    Если данные выбранного поля в числовом формате, программа просуммирует их значения (например, рассчитает общую стоимость проданных автомобилей). Если формат данных текстовый — программа покажет количество ячеек (например, определит количество проданных авто).

  • «Строки» и «Столбцы» — отвечают за визуальное расположение полей в сводной таблице. Если выбрать строки, то поля разместятся построчно. Если выбрать столбцы — поля разместятся по столбцам.
  • «Фильтры» — отвечают за фильтрацию итоговых данных в сводной таблице. После построения сводной таблицы панель фильтров появляется отдельно от неё. В ней можно выбрать, какие данные нужно показать в сводной таблице, а какие — скрыть. Например, можно показывать продажи только одного из менеджеров или только за выбранный период.

Настроить сводную таблицу можно двумя способами:

  • Поставить галочку напротив нужного поля — тогда Excel сам решит, где нужно разместить это значение в сводной таблице, и сразу заберёт его туда.
  • Выбрать необходимые для сводной таблицы поля из перечня и перетянуть их в нужную область вручную.

Первый вариант не самый удачный: Excel редко ставит данные так, чтобы с ними было удобно работать, поэтому сводная таблица получается неинформативной. Остановимся на втором варианте — он предполагает индивидуальные настройки для каждого отчёта.

В случае с нашим примером нужно, чтобы сводная таблица отразила ФИО менеджеров по продаже, проданные автомобили и их цены. Остальные поля — технические характеристики авто и дату продажи — можно будет использовать для фильтрации.

Таблица получится наглядной, если фамилии менеджеров мы расположим построчно. Находим в верхней части панели поле «Продавец», зажимаем его мышкой и перетягиваем в область «Строки».

После этого в левой части листа появится первый блок сводной таблицы: фамилии менеджеров по продажам.

Добавляем в сводную таблицу поле «Продавцы» через область «Строки»
Скриншот: Skillbox

Теперь добавим модели автомобилей, которые эти менеджеры продали. По такому же принципу перетянем поле «Марка, модель» в область «Строки».

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

Добавляем в сводную таблицу поле «Марка, модель» через область «Строки»
Скриншот: Skillbox Media

Определяем, какая ещё информация понадобится для отчётности. В нашем случае — цены проданных автомобилей и их количество.

Чтобы сводная таблица самостоятельно суммировала эти значения, перетащим поля «Марка, модель» и «Цена» в область «Значения».

Добавляем в сводную таблицу поля «Марка, модель» и «Цена» через область «Значения»
Скриншот: Skillbox Media

Теперь мы видим, какие автомобили продал каждый менеджер, сколько и по какой цене, — сводная таблица самостоятельно сгруппировала всю эту информацию. Более того, напротив фамилий менеджеров можно посмотреть, сколько всего автомобилей они продали за квартал и сколько денег принесли автосалону.

По такому же принципу можно добавлять другие поля в необходимые области и удалять их оттуда — любой срез информации настроится автоматически. В нашем примере внесённых данных в сводной таблице будет достаточно. Ниже рассмотрим, как настроить фильтры для неё.


Настраиваем фильтры сводной таблицы

Чтобы можно было фильтровать информацию сводной таблицы, нужно перенести требуемые поля в область «Фильтры».

В нашем примере перетянем туда все поля, не вошедшие в основной состав сводной таблицы: объём, дату продажи, год выпуска и цвет.

Над сводной таблицей появился дополнительный блок с фильтрами
Скриншот: Skillbox Media

Для примера отфильтруем данные по году выпуска: настроим фильтр так, чтобы сводная таблица показала только проданные авто 2017 года.

В блоке фильтров нажмём на стрелку справа от поля «Год выпуска»:

Появилось всплывающее окно для фильтрации
Скриншот: Skillbox Media

В появившемся окне уберём галочку напротив параметра «Выделить все» и поставим её напротив параметра «2017». Закроем окно.

Фильтруем таблицу по году выпуска проданных автомобилей
Скриншот: Skillbox Media

Теперь сводная таблица показывает только автомобили 2017 года выпуска, которые менеджеры продали за квартал. Чтобы снова показать таблицу в полном объёме, нужно в том же блоке очистить установленный фильтр.

Так выглядит отфильтрованная сводная таблица
Скриншот: Skillbox Media

Фильтры можно выбирать и удалять как удобно — в зависимости от того, какую информацию вы хотите увидеть в сводной таблице.


Проводим дополнительные вычисления

Сейчас в нашей сводной таблице все продажи менеджеров отображаются в рублях. Предположим, нам нужно понять, каков процент продаж каждого продавца в общем объёме. Можно рассчитать это вручную, а можно воспользоваться дополнениями сводных таблиц.

Кликнем правой кнопкой на любое значение цены в таблице. Выберем параметр «Дополнительные вычисления», затем «% от общей суммы».

Меняем структуру квартальных продаж менеджеров на процентную
Скриншот: Skillbox

Теперь вместо цен автомобилей в рублях отображаются проценты: какой процент каждый проданный автомобиль составил от общей суммы продаж всего автосалона за квартал. Проценты напротив фамилий менеджеров — их общий процент продаж в этом квартале.

Сводная таблица самостоятельно рассчитала процент продаж за квартал для каждого менеджера
Скриншот: Skillbox Media

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

Так сводная таблица выглядит в свёрнутом виде
Скриншот: Skillbox Media

Чтобы снова раскрыть данные об автомобилях — нажимаем +.

Чтобы значения снова выражались в рублях — через правый клик мыши возвращаемся в «Дополнительные вычисления» и выбираем «Без вычислений».


Обновляем данные сводной таблицы

Предположим, в исходную таблицу внесли ещё две продажи последнего дня квартала.

В исходной таблице появились две дополнительные строки
Скриншот: Skillbox

В сводную таблицу эти данные самостоятельно не добавятся — изменился диапазон исходной таблицы. Поэтому нужно поменять первоначальные параметры.

Переходим на лист сводной таблицы. Во вкладке «Анализ сводной таблицы» нажимаем кнопку «Изменить источник данных».

Жмём сюда, чтобы изменить исходный диапазон
Скриншот: Skillbox Media

Кнопка переносит нас на лист исходной таблицы, где нужно выбрать новый диапазон. Добавляем в него две новые строки и жмём «ОК».

Добавляем в исходный диапазон две новые строки
Скриншот: Skillbox Media

После этого данные в сводной таблице меняются автоматически: у менеджера Трегубова М. вместо восьми продаж становится десять.

Данные в сводной таблице обновились автоматически
Скриншот: Skillbox Media

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

Например, поменяем цены двух автомобилей в таблице с продажами.

Меняем данные двух ячеек в исходной таблице
Скриншот: Skillbox Media

Чтобы данные сводной таблицы тоже обновились, переходим на её лист и во вкладке «Анализ сводной таблицы» нажимаем кнопку «Обновить».

Теперь у менеджера Соколова П. изменились данные в столбце «Цена, руб.».

Жмём сюда, чтобы обновить данные
Скриншот: Skillbox Media

Как использовать сводные таблицы в «Google Таблицах»? Нужно перейти во вкладку «Вставка» и выбрать параметр «Создать сводную таблицу». Дальнейший ход действий такой же, как и в Excel: выбрать диапазон таблицы и лист, на котором её нужно построить; затем перейти на этот лист и в окне «Редактор сводной таблицы» указать все требуемые настройки. Результат примет такой вид:

Так выглядит сводная таблица в «Google Таблицах»
Скриншот: Skillbox Media

Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше

Время на прочтение
25 мин

Количество просмотров 5.9K

Как известно MS Excel последних версий поддерживает описание структуры документа в формате xml. Это обстоятельство позволяет создавать отчеты в Excel с помощью генерации xml-файлов. В СУБД Caché существует несколько способов создания xml. В этой статье будут рассмотрены два, возможно наиболее удобных, способа эффективной программной генерации отчетов в MS Excel: с помощью Zen Reports и с использованием класса %XML.Writer.

В качестве примера отчета MS Excel взята печатная форма учебного плана из системы управления учебным планированием, о которой здесь уже писалось, поэтому перейдём непосредственно к постановке задачи и способам её решения. Требуется получить отчёт учебного плана в формате MS Excel, который должен состоять из графика учебного процесса (титульный лист) и содержания учебного плана (перечень всех дисциплин, их характеристик и вычисляемых параметров). Фрагмент отчёта учебного плана представлен на рисунке, готовый отчёт можно посмотреть здесь.

Общая схема формирования отчёта

В Cache существует несколько способов ручного изготовления отчётов (здесь не будут рассматрены возможности полуавтоматической сборки на базе DeepSee). Самый удобный способ реализован в ZEN и включает в себя набор средств, обеспечивающий полный цикл процесса формирования отчётов в формате XHTML и PDF. Описание этого процесса можно посмотреть в документации. Тем не менее, для решения нашей задачи этот способ можно задействовать только частично.
Рассмотрим общий механизм формирования отчёта в формате MS Excel с применением как технологии ZEN, так и других возможностей Caché (см. рисунок ниже).

Данная схема формирования xls документа включает три этапа: 1) данные из базы конвертируются при помощи технологии Zen Reports или стандартной технологии Caché в xml файл (входной xml); 2) посредством механизма трансформации XSL (eXtensible Stylesheet Language) модифицируется подготовленный заранее шаблон отчёта в формате xml; 3) генерируется документ Excel (xls) путём заполнения шаблона отчёта xml, расширенного вставками XSL, данными из входного xml.

Структура входного xml-файла

Поскольку xml используется в качестве источника данных для нашего отчёта, то структура xml-файла должна быть максимально удобной для прохождения описанных выше этапов и, в конечном счёте, для формирования отчёта. Никаких дополнительных специальных ограничений на структуру xml-файла нет.
Исходя из специфики нашей задачи и структуры базы данных, корневым элементом входного xml является «Curriculum», содержащий всю информацию об учебном плане и включающий следующие элементы:

  • Название учебного плана
  • Сумма форм контроля за весь учебный план: экзаменов; зачётов; курсовых проектов; курсовых работ
  • Сумма часов по всем дисциплинам учебного плана: всего с экзаменом; всего по ГОС (государственный образовательный стандарт); аудиторных часов; КСР (самостоятельная работа на курсовой проект или работу); часов по самостоятельной работе
  • Сумма часов по каждой дисциплине за каждый семестр учебного плана: часы на лекции; часы на лабораторные работы; часы на практические занятия; часы на КСР
  • Сумма зачётных единиц (ЗЕ) на весь учебный план

Также в «Curriculum» содержатся циклы «Cicl», каждый из которых состоит из своих собственных элементов. Аналогично описываются остальные ветви xml-файла вплоть до дисциплин и их характеристик.

Пример xml-файла для описываемого отчёта.

<?xmlversion="1.0" encoding="UTF-8"?>
<Curriculum>
  <CurrName>Название учебного плана</CurrName>
  <Cicl>
    <CiclName>Название цикла 1</CiclName>
    <CodeOfCicl>Код цикла</CodeOfCicl>
      <Block>
        <BlocName>Названиеблока 1</BlocName>
        <Disciplines>
          <Discipline>
            <DiscName>Названиедисциплины 1</DiscName>
            <Exam></Exam>
            <Zachet></Zachet>
            <KR></KR>
            <KP></KP>
            <chAll></chAll>
            <chGos></chGos>
            <chKsr></chKsr>
            <chAud></chAud>
            <chSamRab></chSamRab>
            <naBlock></naBlock>
            <Zet></Zet>

            <semestr1>
              <Lec></Lec>
              <Lab></Lab>
              <Pra></Pra>
              <KSR></KSR>
            </semestr1>
            . . .
          </Discipline>

          <Discipline>
            <DiscName>Названиедисциплины 2</DiscName>
            <Exam></Exam>
            <Zachet></Zachet>
            <KR></KR>
            <KP></KP>
            <chAll></chAll>
            <chGos></chGos>
            <chKsr></chKsr>
            <chAud></chAud>
            <chSamRab></chSamRab>
            <naBlock></naBlock>
            <Zet></Zet>

            <semestr1>
              <Lec></Lec>
              <Lab></Lab>
              <Pra></Pra>
              <KSR></KSR>
            </semestr1>
            . . .
          </Discipline>
          . . .
        </Disciplines>
      </Block>
      . . .
    </Cicl>
    . . .     
</Curriculum>

Формирование исходного xml

Рассмотрим два способа получения исходного xml файла: при помощи класса %XML.Writer и с использованием механизма Zen Reports.

Формирование исходного xml с использованием %XML.Writer

Описанная выше структура xml может быть получена посредством класса XML.Writer, который позволяет:

  1. Создавать корневой элемент
    do fWriter.RootElement(«имя корневого элемента»)
    do fWriter.EndRootElement()
  2. Создавать элемент
    do fWriter.Element(«имя элемента»)
    do fWriter.Write(значение элемента)
    do fWriter.EndElement()
  3. Создавать атрибут
    do fWriter.WriteAttribute(«имя атрибута», «значение атрибута»)

Кроме того, XML.Writer обладает методом, позволяющим извлекать все данные из переданного в него объекта.
Writer.RootObject(«имя объекта»)

В задаче формирования отчёта учебного плана метод RootObject не подошел, т.к. класс дисциплины имеет ссылку сам на себя, и работа этого метода была не корректна. В связи с этим все элементы выходного xml файла были созданы вручную. Для этого был создан класс sp.Report.spExcelWriter, включающий метод genWriterData (iDSelectCur As %Integer) для генерации xml-файла, в который передаётся id выбранного учебного плана. Используя данный метод, с помощью SQL-запросов извлекаются данные из БД, и в нужном месте выполняется их вставка. После этого генерируется выходной xml файл с помощью другого метода OutputToFile(«путьимя файла.xml»).

Формирование исходного xml с использованием механизма Zen Reports

Zen Reports является высокоуровневым механизмом извлечения данных из базы Caché и преобразования их в xml, что накладывает определённые ограничения, о которых будет сказано ниже. Данный способ предполагает создание класса Zen-отчёта через Caché-студию, наследуемый от %ZEN.Report.reportPage, в котором необходимо заполнить блок XData ReportDefinition. Более подробно о правилах формирования блока XData ReportDefinition и выборке данных посредством SQL-запроса для XML-представления можно прочитать в документации.

Здесь приведено содержание блока XData ReportDefinition для рассматриваемого отчёта

XData ReportDefinition [ XMLNamespace «www.intersystems.com/zen/report/definition» ]
{
  <
report xmlns=«www.intersystems.com/zen/report/definition» name=«Curriculum» sql «SELECT * FROM sp.cCurriculum WHERE ID=?» >
  <
parameter expression=‘..idCurr’/>
  <
element name=«CurrName» field=«Name» />
  <
element name=«sumСurEx»  field=«ID» expression «##class(sp.cCurriculum).getCountFCInCur(%val,1)»/>
  <
element name=«sumСurZa»  field=«ID» expression=«##class(sp.cCurriculum).getCountFCInCur(%val,2)»/>
  <
element name=«sumСurKP»  field=«ID» expression=«##class(sp.cCurriculum).getCountFCInCur(%val,4)»/>
  <
element name=«sumСurKR»  field=«ID» expression=«##class(sp.cCurriculum).getCountFCInCur(%val,3)»/>
  <
element name=«sumСurZET» field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,6)»/>
  <
element name=«sumСurAll» field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,1)»/>
  <
element name=«sumСurGos» field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,2)»/>
  <
element name=«sumСurAud» field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,3)»/>
  <
element name=«sumСurKsr» field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,4)»/>
  <
element name=«sumСurSR»  field=«ID» expression=«##class(sp.cCurriculum).getComTimeInCur(%val,5)»/>

  <

group name=«sumCurseme1» >
    <
element name=«sumCurLec» field=«ID» expression=«##class(sp.cCurriculum).getTimeInCur(%val,1,1)»/>
    <
element name=«sumCurLab» field=«ID» expression=«##class(sp.cCurriculum).getTimeInCur(%val,1,2)»/>
    <
element name=«sumCurPra» field=«ID» expression=«##class(sp.cCurriculum).getTimeInCur(%val,1,3)»/>
    <
element name=«sumCurKsr» field=«ID» expression=«##class(sp.cCurriculum).getTimeInCur(%val,1,4)»/>
  </
group>
  …
  <
group name=«Cicls» sql=«SELECT * FROM sp.cCicl WHERE Curriculum = ?» >
    <
parameter expression=‘..idCurr’/>

    <

group name=«Cicl» >
      <
attribute name=«CiclName»   field=«Name»/>
      <
attribute name=«CodeOfCicl» field=«CodeOfCicl» />
      <
element name=«sumCiclEx»    field=«ID» expression=«##class(sp.cCicl).getCountFCInCicl(%val,1)»/>
      <
element name=«sumCiclZa»    field=«ID» expression=«##class(sp.cCicl).getCountFCInCicl(%val,2)»/>
      <
element name=«sumСiclKP»    field=«ID» expression=«##class(sp.cCicl).getCountFCInCicl(%val,4)»/>
      <
element name=«sumСiclKR»    field=«ID» expression=«##class(sp.cCicl).getCountFCInCicl(%val,3)»/>
      <
element name=«sumCiclchAll» field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,1)»/>
      <
element name=«sumCiclchGos» field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,2)»/>
      <
element name=«sumСiclchAud» field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,3)»/>
      <
element name=«sumСiclchKsr» field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,4)»/>
      <
element name=«sumСiclchSR»  field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,5)»/>
      <
element name=«sumСiclZet»   field=«ID» expression=«##class(sp.cCicl).getComTimeInCicl(%val,6)»/>

      <

group name=«sumCiclseme1» >
        <
element name=«sumCiclLec» field=«ID» expression=«##class(sp.cCicl).getTimeInCicl(%val,1,1)»/>
        <
element name=«sumCiclLab» field=«ID» expression=«##class(sp.cCicl).getTimeInCicl(%val,1,2)»/>
        <
element name=«sumCiclPra» field=«ID» expression=«##class(sp.cCicl).getTimeInCicl(%val,1,3)»/>
        <
element name=«sumCiclKsr» field=«ID» expression=«##class(sp.cCicl).getTimeInCicl(%val,1,4)»/>
      </
group>
      …
        <
group name=«Blocks» sql=«SELECT * FROM sp.cBlock WHERE Cicl = ?» breakOnField=«ID»>
          <
parameter field=«ID»/>

            <

group name=«Block»>
              <
attribute name=«BlocName» field=«Name»/>
              <
element name=«countEx» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getCountFCInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1)’/>
              <
element name=«countZa» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getCountFCInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),2)’/>
              <
element name=«countKR» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getCountFCInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),3)’/>
              <
element name=«countKP» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getCountFCInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),4)’/>
              <
element name=«sumBAll» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1)’/>
              <
element name=«sumBGos» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),2)’/>
              <
element name=«sumBAud» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),3)’/>
              <
element name=«sumBKSR» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),4)’/>
              <
element name=«sumBSR»  fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),5)’/>
              <
element name=«sumBZET» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getComTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),6)’/>

              <

group name=«sumBseme1» >
                <
element name=«sumBLec» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1,1)’/>
                <
element name=«sumBLab» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1,2)’/>
                <
element name=«sumBPra» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1,3)’/>
                <
element name=«sumBKSR» fields=«Cicl,Name,ID» expression‘##class(sp.cBlock).getTimeInBlock(%val(«ID»),%val(«Name»),%val(«Cicl»),1,4)’/>
              </
group>
              …
                <
group name=«Disciplines» sql«SELECT * FROM sp.cDiscipline WHERE ( Blok=? AND Cicl=? And Parent is null)» breakOnField=«ID»>
                  <
parameter field=«ID»/>
                  <
parameter field=«Cicl»/>

                    <

group name=«Discipline»>
                      <
element name=«DiscName» field=«Name»/>
                      <
element name=«Exam» field=«ID» expression‘##class(sp.cDiscipline).getFormContr(%val,1)’/>
                      <
element name=«Zachet» field=«ID» expression‘##class(sp.cDiscipline).getFormContr(%val,2)’/>
                      <
element name=«KR» field=«ID» expression‘##class(sp.cDiscipline).getFormContr(%val,3)’/>
                      <
element name=«KP» field=«ID» expression‘##class(sp.cDiscipline).getFormContr(%val,4)’/>
                      <
element name=«chAll» field=«ID» expression‘##class(sp.cDiscipline).getComTime(%val,1)’/>
                      <
element name=«chGos» field=«ID» expression‘##class(sp.cDiscipline).getComTime(%val,2)’/>
                      <
element name=«chKsr» field=«ID» expression‘##class(sp.cDiscipline).getComTime(%val,4)’/>
                      <
element name=«chAud» field=«ID» expression‘##class(sp.cDiscipline).getComTime(%val,3)’/>
                      <
element name=«chSamRab» field=«ID» expression‘##class(sp.cDiscipline).getComTime(%val,5)’/>
                      <
element name=«Zet» field=«ID» expression=‘##class(sp.cDiscipline).getComTime(%val,6)’/>
                      <
element name=«naBlock» field=«ID» expression‘##class(sp.cDiscipline).getNameBlock(..idCurr,%val)’/>

                        <

group name=«seme1»>
                          <
element name=«Lec» field=«ID» expression‘##class(sp.cDiscipline).getTime(%val,1,1)’/>
                          <
element name=«Lab» field=«ID» expression‘##class(sp.cDiscipline).getTime(%val,1,2)’/>
                          <
element name=«Pra» field=«ID» expression‘##class(sp.cDiscipline).getTime(%val,1,3)’/>
                          <
element name=«KSR» field=«ID» expression‘##class(sp.cDiscipline).getTime(%val,1,4)’/>
                        </
group>
                        …
                    </
group>
                </
group>
            </
group>
        </
group>
    </
group>
  </
group
</
report>
}

Zen Report предлагает использование собственного синтаксиса для описания структуры данных для генерируемого xml — это накладывает некоторые ограничения на формат выходного xml. В результате структура полученного xml файла незначительно отличается от описанной выше: в генерируемый xml файл дополнительно добавляются узлы Cicls и Blocks, в которых содержатся подузлы Cicl и Block.
Покажем некоторые особенности вывода связанных данных.

Пример 1. Передача ID выбранного учебного плана в sql запрос элемента .
<

report sql «SELECT * FROM sp.cCurriculum WHERE ID = ?»>

Далее на место «?» передается параметр со значением переменной ..idCurr
<

parameter expression ‘..idCurr’/>

Переменная является свойством класса ZenReport и при вызове метода генерации отчета, значение idCurr принимает значение переданного в метод параметра id текущего учебного плана.

Пример 2. Передача параметра зависящего от результата выполнения SQL запроса, например связь Цикл – Блок:
<

group sql=«SELECT * FROM sp.cCicl WHERE Curriculum = ?»>
  <
parameter expression ‘..idCurr’/>
  <
group sql «SELECT * FROM sp.cBlock WHERE Cicl = ?» breakOnField «ID»>
    <
parameter field «ID» />
  </
group>
</
group>

Здесь передача «ID» осуществляется с использованием атрибута breakOnField = «ID».
Покажем выполнение группировки для «Циклов».
<

group name=«Cicls» sql=«SELECT * FROM sp.cCicl WHERE Curriculum = ?» >
  <
parameter expression=‘..idCurr’/>
        <
group name=«Cicl» >
              <
attribute name=«CiclName»   field=«Name»/>
              <
attribute name=«CodeOfCicl» field=«CodeOfCicl» />
              …
        </
group>
        …
</
group>

Блоки группируются аналогично.
Изменённый формат сгенерированного XML-файла теперь имеет следующий вид.

<?xml version="1.0"  encoding='utf-8'?>
…
<Cicls>
  <Cicl>
    <Blocks>
      <Block>
        <Disciplines>…</Disciplines>
      </ Block>
    </ Blocks>
  </Cicl>
  …
  <Cicl>
    <Blocks>
      <Block>
        <Disciplines>…</Disciplines>
      </ Block>
    </ Blocks>
  </Cicl>
  …
</Cicls>

Также изменится вызов цикла при XSL трансформациях (общий способ применения XSL трансформаций описан ниже):

 <xsl:for-each select = ”./Cicls/Cicl”><xsl:for-each> 

Сформулируем некоторые правила, которые следует учитывать при проектировании структуры выходных данных.

  1. Поле Name будет взято из Table1:
    <report sql=«SELECT Name FROM Table1»>
    <
    element name=«A» field=«Name»/>
  2. Поле Name выдаст ошибку:
    <report sql=«SELECT Name FROM Table1»>
    <
    attribute name=«A» field=«Name»/>
  3. Поле Name получится из Table2:
    <report sql=«SELECT Name FROM Table1»>
    <
    group name=«Name» sql=«SELECT Name FROM Table2 WHERE…»>
    <
    element name=«A» field=«Name»/>
  4. Поле Name получится из Table1:
    <report sql=«SELECT Name FROM Table1»>
    <
    group name=«Name» sql=«SELECT Name FROM Table2 WHERE…»>
    <
    attribute name=«A» field=«Name»/>

Создание шаблона Excel

Перед выполнением XSL-трансформации необходимо создать шаблон документа Excel, в который будут вставляться данные из xml. Порядок создания шаблона Excel состоит из трёх шагов.
Шаг №1. В Excel создаётся внешний вид отчёта.
Шаг №2. Шаблон сохраняется в формате таблицы xml.

Фрагмент общего вида xml создаваемого отчёта.

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<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">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>Microsoft Corporation</Author>
  <LastAuthor>AlexandeR</LastAuthor>
  <LastPrinted>2012-10-31T10:28:49Z</LastPrinted>
  <Created>1996-10-08T23:32:33Z</Created>
  <LastSaved>2012-11-24T12:30:48Z</LastSaved>
  <Version>11.9999</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>7320</WindowHeight>
  <WindowWidth>9720</WindowWidth>
  <WindowTopX>120</WindowTopX>
  <WindowTopY>120</WindowTopY>
  <RefModeR1C1/>
  <AcceptLabelsInFormulas/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
  <DisplayInkNotes>False</DisplayInkNotes>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s374">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <Font ss:FontName="Arial Cyr" x:CharSet="204" x:Family="Swiss" ss:Bold="1"
    ss:Italic="1"/>
   <Protection/>
  </Style>
  . . . 
 <Worksheet ss:Name="Титул">
  <Table>
   <Column ss:AutoFitWidth="0" ss:Width="14.25" ss:Span="66"/>
   <Row>
    <Cell ss:MergeAcross="66" ss:StyleID="s374"><Data ss:Type="String">МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ</Data></Cell>
   </Row>
   . . . 
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <Print>
    <ValidPrinterInfo/>
    <PaperSizeIndex>9</PaperSizeIndex>
    <HorizontalResolution>600</HorizontalResolution>
    <VerticalResolution>600</VerticalResolution>
   </Print>
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>25</ActiveRow>
     <ActiveCol>74</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
   <AllowSort/>
   <AllowFilter/>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="План">
   . . . 
 </Worksheet>
</Workbook>

В приведённом фрагменте видно, что вначале создаётся список стилей, который затем используется для форматирования ячеек. Например:

  <Style ss:ID="s374">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <Font ss:FontName="Arial Cyr" x:CharSet="204" x:Family="Swiss" ss:Bold="1"
    ss:Italic="1"/>
   <Protection/>
  </Style>

На этот стиль ссылается следующая ячейка:

<Cell ss:MergeAcross="66" ss:StyleID="s374"><Data ss:Type="String">МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ</Data></Cell>

Элемент «Worksheet» создаёт листы в книге Excel, например:

<Worksheet ss:Name="Титул">
   . . . 
</Worksheet>

Элемент «Table» создаёт таблицу. Таблица состоит из строк «Row», а строки в свою очередь из ячеек «Cell».
Шаг 3. Посредством любого текстового редактора вносятся изменения в структуру xml путём удаления лишних атрибутов. В нашем случае удаляются атрибуты: ss:ExpandedColumnCount = «67»; ss:ExpandedRowCount = «45»; x:FullColumns = «1»; x:FullRows = «1», так как учебный план имеет произвольное количество дисциплин, и если у элемента «Table» сохранить эти атрибуты, возникнет ошибка при генерации документа Excel из-за несоответствия количества строк и столбцов. Также желательно удалить атрибут ss:Height у <Rowss:AutoFitHeight=«0» ss:Height=«13.5»>, так как если строка будет сильно длинная и в ячейке будет указано «переносить по словам», то переноса по словам не будет в сгенерированном Excel-документе.

XSL-трансформация

Для использования стандартного метода трансформации (в классе %XML.XSLT.Transformer) xml-данных в формат xls требуется подготовить специальный блок xml со встроенными конструкциями XSL. В нашем случае в качестве основы для XSL взят шаблон Excel, подготовленный в предыдущем пункте. Этот шаблон нужно доработать, используя следующие конструкции XSL:

  1. <xsl:for-each select = ""> </xsl:for-each>
    
  2. <xsl:value-of select = ""/>
    

Конструкция <xsl:for-each select = «»> </xsl:for-each> используется для выбора каждого xml элемента заданного набора. Конструкция <xsl:value-of select = «»/> позволяет выводить значения выбранного узла. Ниже приведён простой пример вставки XSL в Excel шаблон:

<Table>
<xsl:for-each select="Curriculum">
  <xsl:for-each select="./Cicl">
    <Row>
      <Cell>
        <Data ss:Type="String"><xsl:value-of select="./CiclName"/></Data>
      </Cell>
    </Row>
    <xsl:for-each select="./Block">
      <Row>
        <Cell>
          <Data ss:Type="String"><xsl:value-of select="./BlocName"/></Data>
        </Cell>
      </Row>
      <xsl:for-each select="./Disciplines/Discipline">
        <Row>
          <Cell>
            <Data ss:Type="String"><xsl:value-of select="./DiscName"/></Data>
          </Cell>
        </Row>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:for-each>
</xsl:for-each>
</Table>

В приведённом примере показано, что в Excel таблице во вложенном цикле идёт обращение ко всем элементам «Cicl», затем в каждом цикле (укрупнённая группа дисциплин) ко всем элементам «Block», затем в каждом блоке к элементам /Disciplines/Discipline, и после этого выводится информация соответствующая указанному полю <xsl:value-ofselect=»./DiscName»/>, т.е. названия дисциплин.
После того как выполнилась вставка элементов XSL в нужные места шаблона можно приступать к процессу генерации отчёта. Для этого можно создать специальный метод в некотором классе, который будет выполнять трансформацию данных из xml формата в xls, используя подготовленный шаблон Excel, который можно разместить в блоке XData этого же класса (в приведённом ниже примере блок XData называется «xsl»). Пример этого метода приведён ниже.

ClassMethod generateReportStadyPlan(outFileName As %StringAs %Status
{
  
set xslStream ##class(%Dictionary.CompiledXData).%OpenId(..%ClassName(1)_ «||xsl»).Data
  set 
xmlStream ##class(%FileBinaryStream).%New()
  
set xmlStream.Filename «Путь к файлу xml»set outStream ##class(%FileCharacterStream).%New()
  
set outStream.TranslateTable «UTF8»
  
set outStream.Filename outFileNameset sc ##class(%XML.XSLT.Transformer).TransformStream(xmlStreamxslStream, .outStream)if $$$ISERR(scquit scquit outStream.%Save()
}

XData xsl
{
<
xsl:stylesheet version=«1.0» xmlns:xsl=«www.w3.org/1999/XSL/Transform»
  
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»>
  <
xsl:template match=«/»>
    <
xsl:processing-instruction name=«mso-application»>
      <
xsl:text>progid=»Excel.Sheet»</xsl:text>
    </
xsl:processing-instruction>

<!-—Место вставки шаблона Excel—>
  </

xsl:template>
</
xsl:stylesheet>
}

Сравнение Zen Reports и %XML.Writer

Механизм Преимущества Недостатки
Zen Reports 1. Избавляет от лишней рутинной работы
2. Описание структуры получается более лаконичным, нет излишних нагромождений
3. Простота восприятия
Структура выходного xml хуже контролируется, приходится соблюдать определенные правила
%XML.Writer Можно создавать абсолютно любую структуру xml Большая трудоёмкость описания структуры

Исходя из специфики архитектуры МАС УУП, в которой создаются java-проекции для классов Caché, к дополнительным преимуществам %XML.Writer можно добавить возможность проецирования класса sp.Report.spExcelWriter, который формирует отчёт. Напротив, в Zen Reports получить проекцию класса отчёта, наследуемого от %ZEN.Report.reportPage, невозможно в силу того, что его методы работают с потоками.
Таким образом, использование XML.Writer целесообразно в случае жёстких требований к структуре выходного xml файла, а использование механизма Zen Reports рекомендуется при создании сложных отчётов, где в первую очередь требуется понятное описание и снижение трудоёмкости.

Понравилась статья? Поделить с друзьями:
  • Программа для формирования документов word
  • Программа для телефона для работы с word
  • Программа для формирования документа word
  • Программа для телефона word excel
  • Программа для форматирования текста word