2 Stimmen

Wie exportiert man aus einer Winform vb.net 2008 ohne installiertes Office nach Excel?

Ich baue eine Windows-Formularanwendung mit Visual Basic (Visual Studio 2008).

Die Idee ist, eine MySQL-DB abzufragen und die Ergebnisse in ein Excel-Dokument zu exportieren.

Dies ist mir mit diesem Code gelungen (ich zeige nur den Teil, der in Excel exportiert wird):

    Imports Excel = Microsoft.Office.Interop.Excel
Imports System.IO
Imports System.Data
Imports MySql.Data.MySqlClient
Imports System.Configuration
Imports System.Runtime.InteropServices

Private Sub btn_getReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_getReport.Click

    Dim wb As Excel.Workbook
    Dim ex As New Excel.Application
    wb = ex.Workbooks.Add(System.Reflection.Missing.Value)
    Dim sheet As Excel.Worksheet = CType(wb.Worksheets.Add, Excel.Worksheet)
    sheet.Name = "algo"

    Dim i As Integer = 1

    Try
        While reader.Read
            sheet.Cells(i, 1) = CStr(reader.Item(0))
            sheet.Cells(i, 2) = CStr(reader.Item(1))
            sheet.Cells(i, 3) = CStr(reader.Item(2))
            i += 1
        End While
    Catch MyEx As MySqlException
        RaiseEvent MySqlError(Err, MyEx, "read")
    Catch exc As Exception
        RaiseEvent MySqlError(Err, exc, "read")
    End Try

    Dim dialog As New SaveFileDialog
    Dim result As DialogResult = dialog.ShowDialog
    Try
        wb.SaveAs(dialog.FileName)
    Catch exerr As Exception
    End Try
    'Show the spreadsheet.
    'ex.Visible = True
    'wb.Activate()

End Sub

Und es funktioniert gut auf meinem Laptop (auf dem Office 2003 installiert ist), aber wenn ich das Setup-Paket erstelle und es auf dem Server installiere, auf dem ich es verwenden werde (auf dem Office nicht installiert ist), erhalte ich diese Fehlermeldung:

"Abrufen der COM-Klassenfabrik für Komponente mit CLSID {00024500-0000-0000-C000-000000000046} ist aufgrund des folgenden Fehlers fehlgeschlagen: 80040154."

Für das, was ich gelesen habe, ist dies ein Problem beim Versuch, Excel zu verwenden, wenn es nicht auf dem Computer vorhanden ist, kann ich verstehen, dass, was wirklich verwirrt mich ist, dass ich Anwendungen verwendet haben, die Informationen zu Excel exportieren, auch auf Computern laufen, ohne dass Office auf ihnen installiert, wie können sie das tun?

Und damit das klar ist: Ich brauche die Excel-Datei, nicht die CSV-Datei.

Herzlichen Dank.

0voto

Rap Punkte 6671

Sie haben das Problem absolut richtig diagnostiziert. Das ist die gute Nachricht. Die schlechte Nachricht ist, dass Sie Excel Interop nicht verwenden können, wenn die Excel-DLLs nicht auf dem Rechner installiert sind.

Ihre Optionen:

  1. Installieren Sie Excel auf dem Rechner, auf dem ausgeführt werden soll.
  2. Ziehen Sie die DLLs (Bibliotheken) und setzen Sie sie ein sie mit Ihrer Anwendung. Unter verletzen Sie damit wahrscheinlich die Lizenzvereinbarungen mit Microsoft. Tun Sie dies auf eigenes Risiko.
  3. Erstellen Sie Excel-Tabellen von Hand in dem von Office 2007 verwendeten Open XML-Format.

Für die dritte Möglichkeit sehen Sie sich das Format für Excel 2007 in diesem Artikel an: http://msdn.microsoft.com/en-us/library/aa338205.aspx

Kurz gesagt, Sie lesen Ihre Daten in ein Dataset ein. Dann exportieren Sie sie in eine XML-Datei. Packen Sie diese Datei zusammen mit allen unterstützenden Informationen in eine Zip-Datei und ändern Sie die Erweiterung in .xlsx. Es ist ein bisschen komplizierter als das, aber nicht viel.

0voto

ChristopheD Punkte 106139

Wenn Sie wirklich die einfache Möglichkeit des Exports in eine komma- oder tabulatorgetrennte Datei nutzen möchten, die Excel perfekt verarbeiten kann...

...dann in das Excel-XML-Format (spreadsheetml) exportieren, indem Sie xml generieren/ein xsl verwenden. Sie finden eine Beispiel hier . Sollte ab Excel 2002+ funktionieren.

0voto

Joe Erickson Punkte 6899

SpreadsheetGear für .NET kann Excel-Dateien exportieren, funktioniert mit jeder .NET-Lösung einschließlich WinForms und erfordert keine Installation von Excel.

Sie können Live-Beispiele sehen aquí und laden Sie die kostenlose Testversion herunter aquí .

Haftungsausschluss: Ich besitze SpreadsheetGear LLC

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X