Unix fähige Excel Bibliothek



  • Hallo,

    ich bin auf der Suche nach einer Excel-Lib die unter Linux funktioiniert.

    Meine Suche hat bislang mir nur die BasicExcel - Lib zurückgeliefert und eine LibXLS (leider kostenpflichtig).

    Problem bei der BasicExcel ist das sie mit meiner zusätzlichen Lib zusammen nicht kompilieren will, da es dann Probleme / Fehler in der Vector Klasse gibt.

    Alleine ohne meine Bibliothekt kompiliert BasicExcel Problemlos durch und arbeitet auch korrekt.

    Wäre dankbar über weitere Excel-Libs die Exceldateien schreiben und lesen können.



  • Schau vielleicht mal, wie OpenOffice.org, KOffice oder Gnumeric das machen. Die können Exceldateien zumindest lesen.

    Vielleicht reicht es dir ja auch, wenn du einfach CSV-Dateien nimmst. Das ist ein einfaches Textformat und wird von Excel unterstützt.



  • Wenn du nicht XLS nehmen musst, dann kannst du es auch mit dem Dateityp "XML-Kalkulationstabelle 2003" versuchen. Der ist zwar gegenüber des normalen Excel-Formats eingeschränkt, basiert aber auf einer reinen XML-Datei.

    Oder du nimmst XLSX -- das seit Excel 2007 aktuelle OfficeOpenXml-Spreadsheet-Format, welches auf einem ZIP-Package, das XML-Dateien zur Beschreibung enthält basiert.

    Problem bei XML ist allerdings, dass du beim Manipulieren selber für die Integrität der Datei verantwortlich bist (d. h. z. B. beim Einfügen von Zeilen Formeln oder Zeilenindizes korrigieren!), was bei größeren Manipulationsoperationen SEHR aufwendig werden kann.
    Wenn du allerdings nur einfache Änderungen vornehmen oder sogar nur Exportieren (d. h. Excel-Datei "from scratch" erstellen) willst, sind die XML-basierten Formate gut geeignet.



  • mein vorhaben ist,

    das ich daten in einer Datenbank habe, und diese in eine Excel Datei schreiben lassen will damit sie anschließend von dritten auf einfachste weiße ("wie man es gwohnt ist") bearbeiten kann.
    Anschließend will ich diese Excel-Datei wieder in Cpp einlesen und dann in die Datenbank schreiben.

    Wäre es denn evtl möglich wenn man z.b. die Daten in eine CSV Datei exportiert diese dann mittels eines art Makros / Cpp-Starter direkt in Excel als "Tabelle" anzeigen zu lassen, ohne das man erst sagen müsste welches die Trennzeichen sind etc?

    Lösung b)
    die Lib BasicExcel würde ansonsten soweit alles erledigen Problem ist halt die Vector-Problematik, wie könnte ich ggf diese auf einfachste weise beseitigen?



  • Wenn du nur Daten exportieren und danach wieder importieren willst und dir sogar eine CSV-Datei reicht, würde ich dir die "XML-Kalkulationstabelle 2003" empfehlen. Die verhält sich für Dritte nämlich wie eine "normale" Excel-Datei (abgesehen von den Feature-Einschränkungen) und unterstützt im Gegensatz zu CSV z. B. auch Formatierungen, Formeln oder mehrere Arbeitsmappentabellen.

    D. h. du bräuchtest eine XML-API mit der du eine korrekte XML-Kalkulationstabelle 2003 mit deinen Daten aus der DB schreibst.
    Nach den Änderungen kannst du die XML-Datei wieder einlesen und die Daten importieren, wobei du beachten musst, dass der Anwender relativ "wilde" Änderungen vorgenommen haben kann -- z. B. gemergte Zellen, leere Zeilen oder sowas. Ist aber auch nicht so schwer.

    Eine minimale XML-Kalkulationstabelle 2003 mit den Zeilen

    Foo  | 42
    Bar  | 3,14159
    

    sieht z. B. so aus:

    <?xml version="1.0"?>
    <?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:x="urn:schemas-microsoft-com:office:excel"
        xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
      <Styles>
    	<Style ss:ID="Default" ss:Name="Normal">
    	  <Alignment ss:Vertical="Bottom"/>
    	  <Borders/>
    	  <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
    	  <Interior/>
    	  <NumberFormat/>
    	  <Protection/>
    	</Style>
    	<Style ss:ID="s62">
    	  <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000" ss:Bold="1"/>
    	</Style>
    	<Style ss:ID="s63">
    	  <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#FF0000"/>
    	</Style>
      </Styles>
      <Worksheet ss:Name="Tabelle1">
    	<Table>
    	  <Row>
    		<Cell ss:StyleID="s62">
    		  <Data ss:Type="String">Foo</Data>
    		</Cell>
    		<Cell ss:StyleID="s63">
    		  <Data ss:Type="Number">42</Data>
    		</Cell>
    	  </Row>
    	  <Row>
    		<Cell ss:StyleID="s62">
    		  <Data ss:Type="String">Bar</Data>
    		</Cell>
    		<Cell ss:StyleID="s63">
    		  <Data ss:Type="Number">3.1415899999999999</Data>
    		</Cell>
    	  </Row>
    	</Table>
      </Worksheet>
    </Workbook>
    

    ... wobei die erste Spalte Fett und die zweite Rot formatiert ist.

    Zum Importieren musst du dann nur mit deiner XML-API über alle Rows gehen und je nach Feldanzahl Cells einlesen.



  • Ich würde in diesem Fall auch zu einer XML-Kalkulationstabelle 2003 raten. Speicher eine leere Tabelle in dem Format ab, gebe Beispieldaten ein und speicher sie in einer neuen Datei ab. Dann siehst du den Unterschied. Das Auslesen geschriebener Zellen sollte einfach zu machen sein. Du mußt dem Benutzer nur eintrichtern dass er es wieder als XML-Kalkulationstabelle speichert.



  • hat dort eventuell bereits jemand ein kleines beispiel wo man mit cpp XML-Kalkulationstabellen erstellt?


Anmelden zum Antworten