Laden...

Excel Export ohne COM und ohne SpreadsheetML

Erstellt von Fr3dd1 vor 12 Jahren Letzter Beitrag vor 12 Jahren 9.246 Views
F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren
Excel Export ohne COM und ohne SpreadsheetML

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

1.029 Beiträge seit 2010
vor 12 Jahren

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

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

ich habe gerade noch eine andere Möglichkeit gefunden. Hier findet man diese. Die Frage ist jedoch, in wie fern das wirklich das native Excel Format ist?

P
10 Beiträge seit 2011
vor 12 Jahren

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

2.891 Beiträge seit 2004
vor 12 Jahren

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...

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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?

W
872 Beiträge seit 2005
vor 12 Jahren

Ich bin ein Fan von EPPlus.
Edit: Umlaute funktionieren ohne Probleme....

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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.

W
872 Beiträge seit 2005
vor 12 Jahren

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...

2.891 Beiträge seit 2004
vor 12 Jahren

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?

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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?

2.891 Beiträge seit 2004
vor 12 Jahren

Ich meine die OLE-DB-Verbindung zur Excel-Mappe. Ich habe es wie in Excel speichern gelöst.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

Zur Excel Mappe habe ich keine OLE-DB-Verbindung erstellt. Dort greife ich direkt über den File- und Byte-Stream zu.

2.891 Beiträge seit 2004
vor 12 Jahren

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.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

Wird die Microsoft Access Database Engine bei Windows bereits mit installiert oder muss man das immer nachinstallieren? Kenne mich da nicht so genau aus.

2.891 Beiträge seit 2004
vor 12 Jahren

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.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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?

2.891 Beiträge seit 2004
vor 12 Jahren

Wenn die im Connectionstring angegebene Datei nicht existiert, wird sie automatisch angelegt.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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?

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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?

2.891 Beiträge seit 2004
vor 12 Jahren

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).

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

Keiner einen Tipp für mich, was die Spaltennamen angeht?

2.891 Beiträge seit 2004
vor 12 Jahren

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.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

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.

F
Fr3dd1 Themenstarter:in
106 Beiträge seit 2010
vor 12 Jahren

Ist zufällig jemandem eine Möglichkeit in den Sinn gekommen?

61 Beiträge seit 2009
vor 12 Jahren

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.