2016-12-07 3 views
-1

Ich bin auf der Suche nach einer automatisierten Methode, um eine Tabellenkalkulationsdatei (Open Office) in ein XML-Format zu konvertieren, das einem LabVIEW-Cluster entspricht und als XML-Datei importiert wird.Open Office (Calc) Tabellenkalkulation zu XML

Ich wurde empfohlen, Python zu verwenden, um Tabellenkalkulation in XML zu konvertieren, jedoch habe ich sehr begrenzte Erfahrung mit Python. Ich habe versucht, Beispiele online zu finden, aber die meisten sind eher auf XML als auf Tabellenkalkulation ausgerichtet und nicht umgekehrt.

Hat jemand einen Rat, wie man Werte aus einer Tabelle automatisch in ein gesetztes XML-Format bringt?

Jede Hilfe wäre sehr willkommen!

Das erforderliche XML-Format ist wie folgt:

<LVData><Version>16.0</Version> 
<Cluster><Name>CVT File Data</Name> 
<NumElts>2</NumElts> 
<Array> 
<Name>Tags</Name> 
<Dimsize>3</Dimsize> 
<Cluster> 
<Name>Tag</Name> 
<NumElts>4</NumElts> 
<EW><Name>Data Type</Name> 
<Choice>Double</Choice> 
<Choice>Single</Choice> 
<Choice>I64</Choice> 
<Choice>I32</Choice> 
<Choice>I16</Choice> 
<Choice>I8</Choice> 
<Choice>U64</Choice> 
<Choice>U32</Choice> 
<Choice>U16</Choice> 
<Choice>U8</Choice> 
<Choice>String</Choice> 
<Choice>Boolean</Choice> 
<Choice>Array of U8</Choice>  
<Choice>Array of U16</Choice> 
<Choice>Array of U32</Choice> 
<Choice>Array of U64</Choice> 
<Choice>Array of I64</Choice> 
<Choice>Array of I32</Choice> 
<Choice>Array of I16</Choice> 
<Choice>Array of I8</Choice> 
<Choice>Array of Double</Choice> 
<Choice>Array of Single</Choice> 
<Choice>Array of Boolean</Choice> 
<Choice>Array of String</Choice> 
<Val>11</Val></EW> 
<String> 
<Name>Name</Name> 
<Val>91Q0-st-CL</Val> 
</String> 
<String> 
<Name>Value</Name> 
<Val>T</Val> 
</String> 
<String> 
<Name>Description</Name> 
<Val>Status Close</Val> 
</String> 
</Cluster> 
<Cluster> 
<Name>Tag</Name> 
<NumElts>4</NumElts> 
<EW><Name>Data Type</Name> 
<Choice>Double</Choice> 
</EW> 
<String> 
<Name>Name</Name> 
<Val>91F2-PAE-I</Val> 
</String> 
<String> 
<Name>Value</Name> 
<Val>T</Val> 
</String> 
<String> 
<Name>Description</Name> 
<Val>Pulse active energy import</Val> 
</String> 
</Cluster> 
<Cluster> 
<Name>Tag</Name> 
<NumElts>4</NumElts> 
<EW><Name>Data Type</Name> 
<Choice>Double</Choice> 
</EW> 
<String> 
<Name>Name</Name> 
<Val>91F2-PAE-E</Val> 
</String> 
<String> 
<Name>Value</Name> 
<Val>T</Val> 
</String> 
<String> 
<Name>Description</Name> 
<Val>Pulse active energy export</Val> 
</String> 
</Cluster> 
</Array> 
<Array> 
<Name>Group Listings</Name> 
<Dimsize>1</Dimsize> 
<Cluster> 
<Name>Tag Grouping</Name> 
<NumElts>2</NumElts> 
<String> 
<Name>Group</Name> 
<Val>Active energy</Val> 
</String> 
<Array> 
<Name>Tag Names</Name> 
<Dimsize>2</Dimsize> 
<String> 
<Name>Names</Name> 
<Val>91F2-PAE-I</Val> 
</String> 
<String><Name>Names</Name> 
<Val>91F2-PAE-E</Val> 
</String> 
</Array> 
</Cluster> 
</Array> 
</Cluster> 
</LVData> 

Antwort

0

Soweit Auslesen von Daten aus Libreoffice Calc Dokumenten, ich habe mit Ezodf viel Glück hat (https://pythonhosted.org/ezodf/)

Eine Marotte, die gelegentlich dazu führt, verwirrendes Dokument: Was früher als Blatt bezeichnet wurde, wird jetzt als Tabelle (Klassennamen) bezeichnet. Beide beziehen sich auf ein Arbeitsblatt.

einige Code-Schnipsel: Öffnen einer Tabelle (FILE = „path/somefile.ods“) und Iteration über eine Teilmenge seiner Arbeitsblätter durch SHEETS angegeben:

doc=ezodf.opendoc(FILE) 
sheets = doc.sheets 
sheetnames = list(sheets.names()) 
for name in SHEETS: 
    print("Starting sheet '{}'".format(name)) 
    do_sheet(sheets[name]) 

def do_sheet(sheet): 
    ... 

eine Zelle in einem Arbeitsblatt Zugriff durch sein kann "A1" or "AB352" Tabellenkalkulation Notation oder durch eine (Zeile, Spalte) null-basierte Ganzzahl 2-Tupel. Also "A4" und (3,0) sind Möglichkeiten, auf dieselbe Zelle zuzugreifen. Eine Zelle ist ein Objekt mit zwei Komponenten: value und value_type. Typischer Code ist so etwas wie

cell = sheet[ (row,col) ] 
t,v = cell.value_type, cell.value 
if t is None: 
    # the cell is empty, convert to empty string 
    thing = '' 
elif t == "string": 
    thing = v 
elif t == "float": 
    # this is an all-digits product code which got stored as a number 
    thing = str(int(v)) 

Sie können für Benutzerdaten auf dem Hut sein, ist nicht der Typ Sie erwartet haben: 1O4 ist nicht hundertvier, es ist eine dreistellige Zeichenkette mit einem Buchstaben O in die Mitte!

Es gibt andere value_type s als Keine, "string" und "float". "date" kommt mir in den Sinn. Für weitere Details über seine und die verschiedenen anderen Methoden von Ezodf-Objekten, konsultieren Sie das Dokument.

Verwandte Themen