VB-Daten in Excel speichern

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Pythagoras.

    VB-Daten in Excel speichern

    Hallo zusammen,

    ich habe das Problem, dass ich aus einem beliebigen Forumular den Inhalt von Textboxen in eine Excel-Datei packen will. Heißt also das ich zb. Hallo in die Textbox eingebe und auf einen Button drücke. Damit speichert VB die Daten aus der Textbox in bestimmte Zellen von Excel.

    Ich habe auch schon gegoogelt und folgenden Programmcode entdeckt:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Test As New Microsoft.Office.Interop.Excel.Application
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Test.Workbooks.OpenXML("Der Pfad der datei....")
    5. Test.Cells(1, 2) = TextBox1.Text
    6. Test.Workbooks.Close()
    7. End Sub
    8. End Class


    Jedoch kommt bei mir nun folgender Fehler: Der Typ "Microsoft.Office.Interop.Excel.Application" ist nicht definiert.

    Meine Fragen sind jetzt:

    1. An was liegt es, dass der Fehler auftritt?

    2. Gibt es eventuell sogar noch eine anderen Funktion, mit der ich die Daten in die Excel-Tabelle schreiben kann?


    Ich hoffe das hier ist die Richtige Kategorie da schon etwas komplizierter als die Anfängerecke ist und auch keine wirkliche Programmierung IN Excel ist.

    Danke im Vorraus! ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pythagoras“ ()

    Du musst Deinem Projekt die DLL Microsoft.Office.Interop.Excel.dll als Verweis hinzufügen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Projekt -> Eigenschaften -> Verweise -> Hinzufügen
    Bilder
    • Excel.jpg

      94,63 kB, 826×446, 1.544 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ich das richtig gelesen habe, ist dieses Packet für Office 2003, ich habe aber Office 2010 und das installieren vom Packet funktioniert deshalb nicht .. gibts da auch eine Version für 2010? Ich kann das Packet nämlich nicht installieren ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pythagoras“ ()

    Hat sonst noch jemand eine Idee, was ich da machen könnte? Vllt. gibts wie gesagt noch eine andere Lösung ... ich muss eben irgendwie Daten von VB in eine Excel-Tabelle kopieren bzw. senden ... Ich bin echt über jeden Tipp dankbar :)
    Hallo,

    hatte gerade das gleiche Problem mit der Interop.Excel.

    Danke an petaod - LateBinding funktioniert hervorragend! Ich wäre ohne den Denkanstoß wohl kaum auf die Idee gekommen, das zu probieren.
    Ein Glück nur, dass ich schon mit Excel-VBA und -Automatisierung gearbeitet habe - sonst wär's ohne IntelliSense ganz schön ...schwierig.

    Danke und Gruß
    Thilo
    Vielen Dank für den Code! Ich hab ihn jetzt folgendermaßen eingebunden:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Excel As Object, Workbook As Object
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Excel = CreateObject("Excel.Application")
    5. Workbook = Excel.Workbooks.OpenXML("C:\Users\Christian\Desktop\test.xlsx")
    6. Workbook.Sheets(1).Cells(1, 1).Formula = TextBox1.Text
    7. End Sub
    8. End Class



    Jedoch kommt der Fehler (Siehe Screenshot):

    An was kann dieser Fehler liegen?

    Danke & Gruß
    Bilder
    • Unbenannt.JPG

      41,06 kB, 725×238, 1.291 mal angesehen
    Statt

    VB.NET-Quellcode

    1. Excel = CreateObject("Excel.Application")
    würde ich als Verweis die Microsoft Excel 10.0 Object Library zum Projekt hinzufügen (zu finden unter COM).
    Die sollte mit deiner Excelversion auch funktionieren. Dann kannst du auch die IntelliSense verwenden und es passieren nicht solche Fehler wie Formula statt Formular.

    Infinity schrieb:

    es passieren nicht solche Fehler wie Formula statt Formular
    Das ist kein Fehler.
    Ich benötige kein IntelliSense, um zu wissen, dass ein Range-Objekt zwar eine Formula-Property aber keine Formular-Property hat.

    Edit: Der Versuch, die COM zu den Verweisen hinzuzufügen ist trotzdem einen Versuch wert, auch wenn es ggf. bei einem Excel-Update zu Problemen führen könnte.
    Allerdings glaube ich nicht, dass sie bei einer reinen Excel2010-Installation existiert. Aber vielleicht gibt's ja eine "Microsoft Excel 14.0 Object Library".
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Ich habe nun noch zwei Fragen:

    Erstens, kann ich das ganze auch mit einer CSV-Datei machen?

    Zum Zweiten würde mich interessieren, wie das Programm, nach dem schreiben der Datein, die Office-Datei wieder mit speichern, automatisch verlassen kann?

    Ich bekomme immer, wenn ich das VB-Programm beende, die Meldung, ob ich die Datei speichern will (Speichern unter, Speichern, Abbrechen).
    Wie kann ich das automatisieren? Gibt es dazu einen speziellen Programmcode? Ich will die Datei einfach Speichern ...

    Danke im Vorraus! :)
    Excel Datei speichern ist natürlich nicht so tragisch:

    VB.NET-Quellcode

    1. Excel.ActiveWorkbook.SaveAs("Test.xls")


    Das haut dir dann eine Text.xls in die eigenen Dateien... Kannste natürlich anpassen wie du lustig bist...

    Aber zum Thema CSV... Dafür brauchste ja im Grunde kein Excel... CSV is ja nix sonderlich anderes als ne Textdatei die die Endung CSV hat ^^
    Eine CSV-Datei würde ich nicht mit Excel bearbeiten, sondern mit dem Streamreader einlesen und die Zeilen mit .Split in Felder zerlegen.

    Falls du Excel-Dialoge generell unterdrücken willst, kannst du das mit

    VB.NET-Quellcode

    1. Excel.DisplayAlerts=False
    erreichen.
    Das Speichern kannst du auch beim Schließen des Workbooks forcieren

    VB.NET-Quellcode

    1. Workbook.Close (SaveChanges:=True, Filename:="c:\test.xlsx")
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Erstmal vielen Dank für eure Antworten! ;)

    Ich werde das jetzt doch mit einer CSV-Datei machen - läuft das jetzt genauso ab, wie mit einer Excel-Datei?

    Ich habe ja einige Textboxen, deren Inhalt in einer bestimmten Reihenfolge in die CSV-Datei geschrieben werden sollen, die CSV dann gespeichert und geschlossen werden soll. Wie läuft das dann ab? Kann ich dann den selben Code, wüe für die Excel-Datei verwenden?


    Im Grunde muss ich also nichts einlesen sondern nur von VB in die CSV-Datei importieren.

    Vielen Dank vorrab :thumbsup:
    Mal ein kleines Beispiel wie du Daten aus einer DGV in eine CSV bekommst

    VB.NET-Quellcode

    1. Public Sub Save_All_Rows_From_DGV_To_CSV()
    2. _Liste_Zum_Speichern.Clear() ' ListOf(String)
    3. With _DGV
    4. ' Anzahl der Zeilen
    5. _Rows_Count = .Rows.Count - 1
    6. For i_ = 0 To _Rows_Count - 1 ' eine zusätzlich abziehen, wenn DGV vom User erweitert werden kann
    7. ' Anzahl der Spalten
    8. _Col_Count = .ColumnCount - 1
    9. Dim Eintrag As String = Nothing
    10. For K_ = 0 To _Col_Count
    11. If Not K_ = _Col_Count Then
    12. Eintrag &= CStr(.Rows(i_).Cells(K_).FormattedValue) & _Delimitter
    13. Else
    14. Eintrag &= CStr(.Rows(i_).Cells(K_).FormattedValue)
    15. End If
    16. Next K_
    17. _Liste_Zum_Speichern.Add(Eintrag)
    18. Next i_
    19. End With
    20. ' Speichern
    21. IO.File.WriteAllLines(_Pfad, _Liste_Zum_Speichern.ToArray, System.Text.Encoding.Default)
    22. End Sub