1

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

Есть ли способ, которым я могу достичь этого? Большое спасибо за вашу помощь.

Мой XML-файл:

<L1>
    <L1dataId>07320</L1dataId>
    <DateDetail>13-Oct-2013</DateDetail>
    <TypeDetail>
        <TypeId>1</TypeId>
        <Rate1>
            <Current>
                <onsite>100</onsite>
                <net>100</net>
                <gross>100</gross>
            </Current>
            <Past>
                <onsite>100</onsite>
                <net>100</net>
                <gross>100</gross>
            </Past>
        </Rate1>
        <Rate2>
            <Current>
                <onsite>2100</onsite>
                <net>2100</net>
                <gross>2100</gross>
            </Current>
            <Past>
                <onsite>2100</onsite>
                <net>2200</net>
                <gross>1200</gross>
            </Past>
        </Rate2>
        <Rate3>
            <Current>
                <onsite>300</onsite>
                <net>300</net>
                <gross>300</gross>
            </Current>
            <Past>
                <onsite>400</onsite>
                <net>400</net>
                <gross>400</gross>
            </Past>
        </Rate3>
    </TypeDetail>
    <TypeDetail>
        <TypeId>2</TypeId>
        <Rate1>
            <Current>
                <onsite>100</onsite>
                <net>100</net>
                <gross>100</gross>
            </Current>
            <Past>
                <onsite>100</onsite>
                <net>100</net>
                <gross>100</gross>
            </Past>
        </Rate1>
        <Rate2>
            <Current>
                <onsite>2100</onsite>
                <net>2100</net>
                <gross>2100</gross>
            </Current>
            <Past>
                <onsite>2100</onsite>
                <net>2200</net>
                <gross>1200</gross>
            </Past>
        </Rate2>
        <Rate3>
            <Current>
                <onsite>300</onsite>
                <net>300</net>
                <gross>300</gross>
            </Current>
            <Past>
                <onsite>400</onsite>
                <net>400</net>
                <gross>400</gross>
            </Past>
        </Rate3>
    </TypeDetail>
</L1>

Как Excel конвертирует это и как мне это нужно: Excel Импорт изображения

2 ответа2

2

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

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

Похоже, вам нужно реструктурировать ваши данные так, чтобы каждый элемент фактически существовал как отдельный элемент.

Вот урезанный пример кода. Обратите внимание, что каждая запись хранится в своем собственном разделе, и такие вещи, как TypeID, Rate и даже состояние, были преобразованы в атрибуты этого элемента:

<L1>
<L1dataId>07320</L1dataId>
<DateDetail>13-Oct-2013</DateDetail>

<Detail>
    <TypeId>1</TypeId>
    <RateID>1</RateID>
    <State>Current</State>
    <onsite>100</onsite>
    <net>100</net>
    <gross>100</gross>
</Detail>

<Detail>
    <TypeId>1</TypeId>
    <RateID>1</RateID>
    <State>Past</State>
    <onsite>100</onsite>
    <net>100</net>
    <gross>100</gross>
</Detail>  

</L1>

При импорте в Excel данные выглядят так:

Импорт XML

1

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

Подробнее здесь и решения, которые работали для меня:

https://stackoverflow.com/questions/23887293/xslt-for-converting-xml-nodename-into-a-node-value

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .