Exceldatei erstellen, Daten in Excel fortschreiben

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Murdersquad.

    Exceldatei erstellen, Daten in Excel fortschreiben

    Hallo,

    ich bin wahrscheinlich zu lange am Rechner, so dass ich nicht mehr klar denken kann, brauche daher mal einen Denkanstoss...

    1.
    Ich möchte mit jedem Klick auf Button1 Daten in eine Excel-Tabelle schreiben und zwar immer hinten angesetzt. Was muss ich hierfür noch tun?
    Aktuell habe ich ein kurzes Beispiel gemacht, hier wird jedoch auch immer die Überschrift mit geschrieben, das muss noch einmalig gemacht werden, quasi nach Erstellen der Datei, aber hier habe ich das nächste Problem.

    2.
    Ich erstelle die Datei, wenn sie nicht vorhanden ist, aber den Weg finde ich ziemlich doof, geht das zufällig einfacher??

    3.
    Nach dem speichern und schließen bleibt Excel weiterhin im TaskMgr aktiv, ich hatte im www den Tipp gelesen "xlApp = Nothing" anzufügen, dies ändert jedoch gar nichts. Was mache ich falsch? Anscheinend gibt es das Problem ja nur bei wenigen Leuten, da die meisten ja mit ähnlichen Codes arbeiten.

    VB.NET-Quellcode

    1. Imports Excel = Microsoft.Office.Interop.Excel
    2. Public Class Form1
    3. Private ueberschrifta1 As String = "Spalte 1"
    4. Private ueberschriftb1 As String = "Spalte 2"
    5. Private ueberschriftc1 As String = "Spalte 3"
    6. Private ueberschriftd1 As String = "Spalte 4"
    7. Private ueberschrifte1 As String = "Spalte 5"
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Dim xlApp As New Excel.Application
    10. Dim xlWorkBook As Excel.Workbook
    11. Dim misValue As Object = System.Reflection.Missing.Value
    12. Dim Tabelle As Excel.Worksheet
    13. Dim file As String = "C:\test.xlsx"
    14. If Not System.IO.File.Exists(file) Then
    15. xlWorkBook = xlApp.Workbooks.Add
    16. xlWorkBook.SaveAs(file)
    17. MessageBox.Show("Es ist ein Fehler aufgetreten, bitte wiederholen Sie den Vorgang!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
    18. Exit Sub
    19. End If
    20. xlWorkBook = xlApp.Workbooks.Open(file)
    21. Tabelle = xlWorkBook.Sheets(1)
    22. Dim row = xlWorkBook.Sheets(1).Cells(xlWorkBook.Sheets(1).Rows.Count, 1).End(Excel.XlDirection.xlUp).Offset(1).Row
    23. xlApp.Visible = True
    24. xlApp = New Excel.Application
    25. xlWorkBook = xlApp.Workbooks.Add(misValue)
    26. 'Überschriften
    27. Tabelle.Cells(1, 1).Formula = ueberschrifta1
    28. Tabelle.Cells(1, 2).Formula = ueberschriftb1
    29. Tabelle.Cells(1, 3).Formula = ueberschriftc1
    30. Tabelle.Cells(1, 4).Formula = ueberschriftd1
    31. Tabelle.Cells(1, 5).Formula = ueberschrifte1
    32. 'Buchungsdaten eintragen
    33. Tabelle.Cells(row, 1).Formula = TextBox1.Text
    34. Tabelle.Cells(row, 2).Formula = TextBox2.Text
    35. Tabelle.Cells(row, 3).Formula = TextBox3.Text
    36. Tabelle.Cells(row, 4).Formula = TextBox4.Text
    37. Tabelle.Cells(row, 5).Formula = TextBox5.Text
    38. 'Formatierung
    39. Tabelle.Range("A1:G1").Font.Bold = True
    40. Tabelle.Columns.AutoFit()
    41. xlApp.DisplayAlerts = False
    42. xlWorkBook.Save()
    43. xlWorkBook.Close()
    44. xlApp.Quit()
    45. xlApp = Nothing
    46. End Sub
    47. End Class


    Bitte helft mir mal etwas auf die Sprünge :/
    1. Verlagere den Headerschreibcode in den Erstellungsblock.
    2. Sehe ich jetzt nicht als doof. Wäre aber m.E. einfacher, wenn Du mit If-Else arbeitest:

    VB.NET-Quellcode

    1. If Not System.IO.File.Exists(file) Then
    2. xlWorkBook = xlApp.Workbooks.Add
    3. Tabelle = xlWorkBook.Sheets(1)
    4. 'hier noch die Headerdaten/Überschriften ins Sheet reinschreiben
    5. Else
    6. xlWorkBook = xlApp.Workbooks.Open(file)
    7. Tabelle = xlWorkBook.Sheets(1)
    8. End If

    Die MessageBox versteh ich nicht. Muss die sein? Das Exit Sub brauchst Du nicht. Kannst ja gleich mit dem Workbook weiterarbeiten. Gespeichert wird ja eh zum Schluss.
    3. Ich arbeite ähnlich, allerdings vernichte ich die COM-Objekte Workbook und Worksheet. Könnte daran liegen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Zu 3. Du machst zwei Excel-Sitzungen auf, von denen du nur eine zumachst. Zeile 9 und 28.
    Wenn Du in nach Zeile 28 noch einmal xlApp.Visible = True machst, solltest Du dies sehen können.

    Noch eine Anmerkung zum Füllen von Excel-Zellen .Formula ist zum Einfügen von Formeln, .Value zum Einfügen von Werten.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Ich danke euch, ich habe die Fehler ausgemerzt. Längere Zeit nichts gemacht und schon tut man sich schwer ;)

    Edit: Mir fiel gerade auf, dass Excel trotzdem im Taskmgr bleibt, Code sieht aktuell so aus:
    Bitte nicht schimpfen, weil ich es nicht mit IF-THEN-ELSE gemacht habe, aber ich hatte Probleme im ersten Durchlauf.
    Ich habe nochmal ein Close, Quit zum Add ergänzt, aber es bleibt trotzdem im Taskmgr.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim xlApp As New Excel.Application
    3. Dim xlWorkBook As Excel.Workbook
    4. Dim Tabelle As Excel.Worksheet
    5. 'Dim KW As String = Kalenderwoche(Now)
    6. Dim file As String = "C:\test.xlsx"
    7. If Not System.IO.File.Exists(file) Then
    8. xlWorkBook = xlApp.Workbooks.Add
    9. Tabelle = xlWorkBook.Sheets(1)
    10. xlApp.Visible = False
    11. 'Überschriften
    12. Tabelle.Cells(1, 1).Value = ueberschrifta1
    13. Tabelle.Cells(1, 2).Value = ueberschriftb1
    14. Tabelle.Cells(1, 3).Value = ueberschriftc1
    15. Tabelle.Cells(1, 4).Value = ueberschriftd1
    16. Tabelle.Cells(1, 5).Value = ueberschrifte1
    17. xlWorkBook.SaveAs(file)
    18. xlWorkBook.Close()
    19. xlApp.Quit()
    20. End If
    21. xlWorkBook = xlApp.Workbooks.Open(file)
    22. Tabelle = xlWorkBook.Sheets(1)
    23. xlApp.Visible = False
    24. Dim row = xlWorkBook.Sheets(1).Cells(xlWorkBook.Sheets(1).Rows.Count, 1).End(Excel.XlDirection.xlUp).Offset(1).Row
    25. 'Buchungsdaten eintragen
    26. Tabelle.Cells(row, 1).Value = TextBox1.Text
    27. Tabelle.Cells(row, 2).Value = TextBox2.Text
    28. Tabelle.Cells(row, 3).Value = TextBox3.Text
    29. Tabelle.Cells(row, 4).Value = TextBox4.Text
    30. Tabelle.Cells(row, 5).Value = TextBox5.Text
    31. 'Formatierung
    32. Tabelle.Range("A1:G1").Font.Bold = True
    33. Tabelle.Columns.AutoFit()
    34. xlApp.DisplayAlerts = False
    35. xlWorkBook.Save()
    36. xlWorkBook.Close()
    37. xlApp.Quit()
    38. End Sub

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