Как преобразовать иерархическую сводную таблицу Excel в схему XML - PullRequest
0 голосов
/ 23 января 2020

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

Таблица образцов таксонов в каждом ящике:

enter image description here

Я создал сводную таблицу, которая преобразует данные в иерархическое дерево как структура, более или менее отражающая способ, которым я хотел бы, чтобы метки были настроены (ниже).

Сводная таблица таксонов в каждом ящике:

enter image description here

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

Если есть решение Python, мне бы очень хотелось увидеть вас ' все мысли или, может быть, есть простой способ сделать это с помощью встроенного в Excel XML exporter. Очень ценю помощь!

1 Ответ

0 голосов
/ 23 января 2020

Вы можете использовать python библиотеки pandas и dictto xml для выполнения этой задачи довольно легко.

Допустим, у вас есть данные в файле с именем data.csv. Затем вы можете использовать этот (немного хакерский) фрагмент кода, чтобы преобразовать его в желаемый формат xml:

from collections import defaultdict

import pandas as pd
from dicttoxml import dicttoxml

data = pd.read_csv("./data.csv", sep=";")

xml_dictionary = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(str))))

for drawer, drawer_data in data.groupby(by="Drawer"):
    for class_, class_data in drawer_data.groupby(by="Class"):
        for subclass, subclass_data in class_data.groupby(by="Subclass"):
            for suborder, suborder_data in subclass_data.groupby(by="Suborder"):
                for family, family_data in suborder_data.groupby(by="Family"):
                    xml_dictionary[drawer][class_][subclass][suborder] = family

result = dicttoxml(xml_dictionary, custom_root='Labels', attr_type=False)
open('./result.xml', 'wb').write(result)

Таким образом, вам даже не нужно использовать сводную таблицу Excel, которую вы создан!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...