Hallo zusammen,
ich möchte folgendes umsetzen:
Eine Datenbank soll in eine Excel Daten exportiert werden.
Die Excel-Datei soll jedoch ohne COM-Komponenten und auch ohne
die Auszeichnungssprache SpreadsheetML erstellt werden.
Gibt es überhaupt noch andere Möglichkeiten?
Wenn ja, welche sind das?
Gruß Fr3dd1
Hi,
warum auch immer diese Vorgaben existieren -
mur fällt spontan Aspose ein:Aspose Cells
Sieht nicht so aus als basiert es auf Com oder SpreadsheetML.
LG
Achim
Hi,
du kannst native Office (xls, doc, ppt) Files mit der NPOI Bibliothek erstellen. Hatte diese bereits erfolgreich bei einem Projekt im Einsatz. Eine Installation von Office ist dafür nicht erforderlich.
MfG. Peter
Willst du nur Daten schreiben oder auch Formatierungen festlegen?
Einfach nur eine Excel-Datei mit den Daten erstellen ist mittels OLEDB (z.B. Excel speichern) ohne zusätzliche Bibliotheken relativ leicht machbar.
Hast du mal im Forum gesucht? Denn beispielsweise Exceldateien (xls) binär schreiben - Ohne COM-Interop (PIA) nennt ja schon einige Möglichkeiten...
Mir reicht das einfache schreiben ohne Formatierung. Die von mir gepostete Möglichkeit funktioniert soweit, allerdings möchte ich auch Umlaute und Unicode Zeichen schreiben, momentan werden diese nicht richtig gespeichert. Hat hier jemand eine Idee?
Wenn EPPlus nur excel 2007 / 2010 schreibt ist das zu wenig. Gut wäre wenn alle Excel Versionen mit den exportierten Files umgehen könnten.
EPPLus benutzt halt OpenXML - das alte Format ist propriatär, also nicht offiziell dokumentiert. Wer ein altes Excel hat, muss halt den Compatibility Pack installieren...
Die von mir gepostete Möglichkeit funktioniert soweit, allerdings möchte ich auch Umlaute und Unicode Zeichen schreiben, momentan werden diese nicht richtig gespeichert.
Bei mir schon. (Siehe Anhang.)
Welchen Connectionstring bzw. OLE-DB-Provider verwendest du? Und welche Excel-Version?
Ich verwende excel 2003 / 2007 und meine Connection baue ich wie folgt auf:
SqlCeConnection conn = new SqlCeConnection("Data Source = " + DataSource);
(DataSource ist der Pfad zu einem SQLCE DB File "C:\db.sdf").
Wie hast du das gelöst?
Zur Excel Mappe habe ich keine OLE-DB-Verbindung erstellt. Dort greife ich direkt über den File- und Byte-Stream zu.
Oh, ich habe mich oben verlesen. Du hast "mir" statt "dir" geschrieben. Ich war davon ausgegangen, dass du die von mir gepostete Möglichkeit ausprobiert hast.
Also noch einmal zum Entwirren: Ich habe die Methode aus Excel speichern genommen (mittels OLE-DB-Verbindung die Excel-Mappe erstellen/befüllen). Damit gehen auch umlaute und Unicode-Zeichen. Und wie gesagt ohne zusätzliche Bibliotheken - es muss nur die Microsoft Access Database Engine installiert sein.
Wird die Microsoft Access Database Engine bei Windows bereits mit installiert oder muss man das immer nachinstallieren? Kenne mich da nicht so genau aus.
Von welchen Umgebungen reden wir denn?
Soweit ich weiß, musst du die 64bit-Version immer noch separat installieren. Wenn du aber deine Anwendung als 32bit kompilierst und keine xlsx-Dateien erstellen willst, sollte der Zugriff mittels Jet eigentlich möglich sein, ohne zusätzlich was installieren zu müssen.
Auf Excel Connection String Samples - ConnectionStrings.com findest du auch verschiedene Beispiele.
So, ich werde das Ganze jetzt mit OLE DB umsetzen.
Ich habe allerdings direkt zum Anfang eine Frage:
Kann man im ConnectionString angeben, dass die Datei neu erzeugt werden soll?
Wenn nicht, wie kann ich diese Datei dann erzeugen?
Wenn die im Connectionstring angegebene Datei nicht existiert, wird sie automatisch angelegt.
Ja, das habe ich gemerkt, habe mich auch falsch ausgedrückt.
Neben Excel soll das Ganze auch in Access geschehen. Hier soll es ja auch mit OLEDB gehen. Jetzt die Frage, wie ich eine solche Access DB erstellen kann?
Habe auch noch eine Frage zu Excel: Wenn ich die Tabellen mit Create anlege, werden in den Excel Arbeitsmappen ja die Spaltennamen oben mit eingebaut. Gibt es eine Möglichkeit dies zu unterbinden? Das die Tabelle direkt mit den Daten anfängt und nicht zuerst die Spaltenköpfe auflistet?
Das die Tabelle direkt mit den Daten anfängt und nicht zuerst die Spaltenköpfe auflistet?
Guck mal in deinen Connectionstring:
Zitat von: Excel Connection String Samples - ConnectionStrings.com
"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.
Allerdings kannst du dann in den SQL-Befehlen auch keine Spaltennamen mehr verwenden. Die Spalten heißen dann "F1", "F2", "F3" usw.
Und die Datentypen scheinen dann auch nicht mehr so richtig zu funktionieren. Bei meinem Test waren alle Spalten Text (statt Zahlen/Datum/etc. bei HDR=Yes).
Muss ich den Befehl zum Erstellen der Tabelle dann auch abändern? Nur auf HDR umstellen reicht nicht, es erscheinen immer noch die Spaltennamen in der Tabelle.
Ich hab's bei mir mal probiert und beim Create Table werden tatsächlich die Spaltennamen in die erste Zeile geschrieben.
Woran das liegt oder wie man das beseitigen kann, weiß ich leider nicht.
Ich frage mich, ob das überhaupt möglich ist? Eventuell referenziert OleDB selbst über den Text in den Spaltenüberschriften. Wäre sehr schade wenn es nicht möglich wäre, die Spaltenüberschriften wegzulassen.
Hallo Fr3dd1,
einen Verweis hat dN!3L :::
Dort findet man ganz am Ende einen Link zu dem HIER.
Das Projekt heißt zwar ExcelReader, aber schreiben bzw. erstellen von Excel-Dateien im XLS-Form geht auch.
Der Entwickler dieses Projekt hat sich die Mühe gemacht, das CDFF (Compound Document File Format) über eine eigene Bibliothek anzusteuern.
Leider gibt es von Microsoft keine Bibliotheken für das alte Format (von 97 bis Office 2003). Aber der Aufbau der verschiedenen Office-Dateien ist öffentlich bekannt. Anhand dessen hat auch OpenOffice seine Bibliotheken aufgebaut.
Schau einfach mal rein in den ExcelReader.
Unter Umständen muss man den Code noch etwas anpassen, weil ich in bestimmten Situationen Fehler erhielt - aber nur geringfügig.
Gruß
Ruben
In der Zeit vor fünf Minuten ist Jetzt die Zukunft. Jetzt ist die Gegenwart. Die Zeit, in der ich zu erzählen begonnen habe, ist die Vergangenheit von Jetzt und die Zukunft von der Gegenwart der Zeit, fünf Minuten bevor ich zu erzählen begann.