Excel Liste als Const. C Liste?

Gast #1939106
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
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 ;-) .
Gast
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
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
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

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.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.