TVTablesViewer Открыть

XML в таблицу: где Excel подводит

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

Обновлено 2026-09-20 · формат XML

Откуда берётся задвоение

Представьте случай лечения на сумму 5 000 рублей, внутри которого три услуги. Таблица должна быть либо одной строкой (случай), либо тремя (услуги). Excel при развороте вложенности делает третье: три строки, и в каждой повторяется сумма случая.

Это называется декартовым произведением. Сумма по такой таблице даст 15 000 вместо 5 000. Если услуг у случаев разное количество, ошибка будет неравномерной — и проверить её сложением «в уме» не получится.

Беда в том, что таблица при этом выглядит совершенно нормально.

Правильная постановка вопроса

Прежде чем разворачивать XML, нужно ответить: что является строкой. Ответ зависит от задачи, и он может меняться от вопроса к вопросу в пределах одного файла.

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

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

Атрибуты — тоже данные

Половина XML-выгрузок хранит значения не в тексте элементов, а в атрибутах: <row id="1" name="Первый"/>. Часть инструментов про них забывает и показывает пустую таблицу с правильным числом строк.

Атрибуты должны становиться колонками наравне с вложенными элементами — с понятной пометкой, чтобы не путать @id (атрибут) и id (вложенный элемент), когда в документе есть оба.

Имена колонок из путей

При разворачивании вложенных элементов имя колонки собирается из пути: PACIENT/SNILS. Это длиннее, чем просто SNILS, зато не возникает коллизий — а они неизбежны, когда одно и то же имя встречается на разных уровнях (DATE у случая и у услуги).

При выгрузке в DBF, где имя поля не длиннее десяти символов, такие имена сокращаются — и программа обязана сказать, как именно, а не молча обрезать.

Частые вопросы

Можно ли доверять сводной таблице по импортированному XML?

Только если вы уверены, что вложенность не разворачивалась в декартово произведение. Проверьте общую сумму по одному известному случаю.

Как посчитать количество услуг в случае?

Открыть таблицу на уровне услуг и сгруппировать по идентификатору случая с показателем «количество».

Что делать с очень глубокой вложенностью?

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

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

Ещё по теме