Liebe Community,
ich habe bereits ausgiebig gegoogelt, aber entweder suche ich nach den
falschen Begriffen, oder so ein Tool gibt es nicht.
Ich habe folgenden Sachverhalt:
Eine Excel Liste:
Attribute 1 | Attribute 2 | Attribute 3 ...
-----------------------------------------------------
DEF_VAL1 | 0x12 | 0x0ABC
DEF_VAL3 | 0x11 | 0x000C
.
.
.
Ich habe eine entsprechende Liste in C
1
typedef struct{
2
const uint16_t attribute1;
3
const uint32_t attribute2;
4
const uint32_t attribute3;
5
}MYLIST;
6
7
static const MYLIST mylist[] =
8
{
9
{
10
DEV_VAL1,
11
0x12,
12
0x0ABC
13
},
14
15
{
16
DEV_VAL5,
17
0x11,
18
0x000C
19
},
20
21
.
22
.
23
.
24
25
}
Die Excelliste enthält ca. 500 Einträge die brauche ich in beschriebener
Form als C Code. Ich glaube einen solchen Parser schon einmal gesehen zu
haben, finde Ihn aber nicht mehr... Dürfte auch nicht so schwer sein so
einen Parser selber zu schreiben, immerhin lässt sich ein Excel File als
XML exportieren - bevor ich das aber mache wollte ich erst fragen ob
jemand ein solches Tool kennt, oder evtl. selbst geschrieben hat. :)
Das einfachste ist, die Excel-Datei als CSV-Datei zu exportieren (dann
hat man eine Textdatei, in der die Felder durch Trennzeichen getrennt
sind) und dann einen kleines Programm zu schreiben, das diese Datei
parsed und die C-Ausgabe erzeugt.
Matthias H. schrieb:> Das einfachste ist, die Excel-Datei als CSV-Datei zu exportieren (dann> hat man eine Textdatei, in der die Felder durch Trennzeichen getrennt> sind) und dann einen kleines Programm zu schreiben, das diese Datei> parsed und die C-Ausgabe erzeugt.
Genau die Arbeit will er vermeiden, da er schon so ein Programm gesehen
hat (welches allerdings XML-Daten erwartet).
Ich hab sowas gefunden:
http://de.wikipedia.org/wiki/XSL_Transformation
Aber vermutlich ist es einfacher, wenn du dir das Programm selber
schreibst (vergiss dabei nicht, deinen Beitrag zur Codesammlung zu
leisten^^)
> Genau die Arbeit will er vermeiden, da er schon so ein Programm gesehen> hat (welches allerdings XML-Daten erwartet).
Gerade weil XML-Verarbeitung eine Wissenschaft für sich ist, wenn man
sich damit nicht auskennt, habe ich die Lösung mit Textdatei
vorgeschlagen ;-) .
Du schreibst in die 4. Spalte Deiner Excel-Tabelle folgende "Formel":
=VERKETTEN("{";A1;", ";B1;", ";C1;"},")
Diese kopierst Du dann in alle 500 Zeilen. Dann markierst Du die 4.
Spalte <ctrl-C>, öffnest Deinen Texteditor, <ctrl-V>. Dann noch ein paar
Klammern nachtragen und fertig.
Also natürlich wäre ein kleiner Parser die eleganteste Lösung und ich
denke ich werde mir da auf Dauer einen schreiben - wenn ich das mache
veröffentliche ich den natürlich hier. :)
Als Quick&Dirty Lösung finde ich den Vorschlag von Johann genial! :)
Excel kann schon viel, man muss nur wissen was und wie. :p
Danke für die Tipps! :O
Also im Prinzip besteht so ein klassisches .XLS File aus sogennanten
BIFF-Records. Die haben einem festen Teil, bestehend aus der Record
Number
und Record Data Length, jeweils 16 Bit WORD. Danach folgen die Daten,
deren Länge sich aus der Record Data Length ergibt. Im Prinzip musst Du
Dich jetzt nur durch Biff-Records durchhangeln, bis Du die betreffenden
Zellen gefunden hast. Es gibt einige hundert verschiedene Typen, wovon
Du die wenigsten aber für Deinen Fall brauchst. Die Record Number 0003
ist der Reord-Typ Number, der einen Floating-Point Wert enthält, 0004
ist ein Label, der enthält Text. Den Aufbau der jeweiligen Records musst
Du natürlich kennen. Es gibt, oder gab mal von MS ein Beispielcode als
Source, dar nannte sich undump.c. Ich weiß aber nicht, ob die neueste
Version von EXCEL, die Daten nur noch als XML speichert
gk
Hallo,
ich hab mal (in 10 Minuten) ein Rubyscript gezimmert, dass eine
CSV-Datei in Dein C-Format konvertiert. Zum Ausführen brauchst Du also
Ruby (http://www.ruby-lang.org/de/). Ansonsten sollte der Code auch für
Nicht-Rubyprogrammierer halbwegs
nachvollziehbar und modifizierbar sein.
Beste Grüße
Alfred
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.