Excel Liste als Const. C Liste?

Gast #1939106
Lesenswert?

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. :)
Persönliche Seite #1939202
Lesenswert?

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^^)
Gast #1939241
Lesenswert?

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.
Gast #1939905
Lesenswert?

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
Gast #1939924
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren