Daten impotieren Problem

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von miko1204.

    Daten impotieren Problem

    Hallo

    Ich hab 2 probleme

    1. wenn ich von excel daten holle funktioniert alles super nur beim Taskmanager leauft "excel.exe" obwohl "xlApp.Quit()" eingegeben ist?

    VB.NET-Quellcode

    1. Try
    2. Dim xlApp As Object
    3. Dim xlBook As Object
    4. Dim xlSheet As Object
    5. Dim fl As String = file.Text
    6. Dim b As String = cellb.Text
    7. Dim n As Integer = celln.Text
    8. Dim s As Integer = sh.Text
    9. xlApp = CreateObject("Excel.Application")
    10. xlBook = xlApp.workbooks.Open(fl)
    11. xlSheet = xlBook.worksheets(s)
    12. TextBox1.Text = xlSheet.Range(b & n).Value
    13. xlBook.Save()
    14. xlBook.Close()
    15. xlApp.Quit()
    16. Catch ex As Exception
    17. End Try


    2. beim xlBook.Save() da die Datei schon existiert fragt er ob ich die Datei ueberschreiben moechte da sie schon existiert also ist ein windows massagebox

    ich moechte das die Meldung nicht erscheint, die ist leasstig, wie mach ich es?

    mit

    VB.NET-Quellcode

    1. if io.file.exist("filepath") then
    2. replace...
    3. end if


    koennte das funktionieren? denn ich moechte nicht die alten daten verlieren und wenn er replace macht ueberschreibt er die erste oder?

    danke
    Schäm dich nicht "Zu fragen", schäm dich "Nicht zu wissen". ?(
    Du mußt alle Excel-Objekte richtig freigeben, siehe: COM-Objekte in .NET deterministisch freigeben

    Mit "alle Excel-Objekte" meine ich nicht nur die explizit von dir erstellten sondern auch die implizit von VB erstellten:

    Beispiel:

    VB.NET-Quellcode

    1. '// ...
    2. '// Verweis auf die Excel-Workbooks-Auflistung holen.
    3. '// Das ist deshalb nötig, damit man dieses Objekt anschließend
    4. '// wieder richtig freigeben kann.
    5. xlsWorkbooks = xlsApp.Workbooks
    6. '// Hier würde dieser Befehl:
    7. '// xlsBook = xlsApp.Workbooks.Open(strFile)
    8. '// völlig ausreichen, aber dann hat man keinen Verweis auf
    9. '// xlsApp.Workbooks
    10. '// und man kann dieses Objekt nicht richtig freigeben.
    11. '// Das FrameMurks macht das nämlich nicht und Excel beendet sich dann nicht
    12. '//
    13. '// deshalb eben über den explizit nur zu diesem Zweck erstellten
    14. '// Verweis auf die Workbooks-Auflistung zugreifen:
    15. xlsBook = xlsWorkbooks.Open(strFile)
    16. '// ...
    17. '// Das soll gemacht werden:
    18. '//
    19. '// xlsTable = CType(xlsBook.Worksheets.Add, Excel.Worksheet)
    20. '//
    21. '// und so sieht das dann aus, wenn die COM-Referenzzählung
    22. '// korrekt berücksichtigt wird:
    23. xlsSheets = xlsBook.Worksheets
    24. xlsTable = CType(xlsSheets.Add, Excel.Worksheet)
    25. Set_COM_Object_to_Nothing(CType(xlsSheets, Object))
    26. xlsSheets = Nothing
    27. '// ...
    28. '// Das soll gemacht werden:
    29. '//
    30. '// CType(xlsTable.Cells(1, 1), Excel.Range).Value = "Variable"
    31. '//
    32. '// und so sieht das dann aus, wenn die COM-Referenzzählung
    33. '// korrekt berücksichtigt wird:
    34. xlsCells = xlsTable.Cells
    35. xlsRange = CType(xlsCells(1, 1), Excel.Range)
    36. xlsRange.Value = "Variable"
    37. Set_COM_Object_to_Nothing(CType(xlsCells, Object))
    38. xlsCells = Nothing
    39. Set_COM_Object_to_Nothing(CType(xlsRange, Object))
    40. xlsRange = Nothing
    41. '// ...
    42. Set_COM_Object_to_Nothing(CType(xlsBook, Object))
    43. xlsBook = Nothing
    44. Set_COM_Object_to_Nothing(CType(xlsWorkbooks, Object))
    45. xlsWorkbooks = Nothing
    46. '// ...
    47. Private Sub Set_COM_Object_to_Nothing(ByRef objCom As Object)
    48. '//
    49. '// schon wieder mal ein Workaround um ein komisches Verhalten des FrameMurks zu umgehen
    50. '//
    51. '// Ein einfaches 'objCom = Nothing' zum Freigeben des Objekts, so wie es in VB6 normal
    52. '// war, reicht nicht mehr. Das entsprechende Objekt lebt dann noch weiter und die zugehörige
    53. '// Komponente beendet sich dann noch nicht, obwohl es keinen gültigen Verweis mehr darauf gibt.
    54. '//
    55. '// Hier muß man das FrameMURKS explizit dazu zwingen, daß es diese COM-Objekte RICHTIG
    56. '// freigibt, also auch den Referenzzähler erniedrigt etc.
    57. Try
    58. Dim intRef As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
    59. If intRef <= 0 Then
    60. objCom = Nothing
    61. Else
    62. LogFile("COM-Object is not Nothing", objCom.ToString)
    63. End If
    64. Catch ex As Exception
    65. End Try
    66. End Sub


    Gruß
    Gaga
    ?( Ich hab nicht richtig verstanden was du da gemacht hast

    aber ich hab das Problem anders behoben und zwar mit process.kill

    VB.NET-Quellcode

    1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    2. Dim _proc As System.Diagnostics.Process
    3. Dim pList() As Process
    4. pList = Process.GetProcessesByName("EXCEL")
    5. For Each _proc In pList
    6. _proc.Kill()
    7. Next
    8. End Sub


    nach jeder aktion die mit excel zu tun hat wird

    VB.NET-Quellcode

    1. Button6.PerformClick()


    gerufen und so wird excel.exe geschlossen und erscheint nicht mehr im Taskmanager

    Hat jemand ne idee wie ich die lestige Frage uebergehen kann "Datei existiert, soll sie uberschriben werden?"
    ich moechte das die ueberschrieben wird ohne das ich jedes mal auf JA klicken muss

    danke
    Schäm dich nicht "Zu fragen", schäm dich "Nicht zu wissen". ?(