Benutzer mit den meisten Antworten
VB:Net mit Excel 2007

Frage
-
Guten Abend, ich habe eine WinForm- Anwendung in VB.Net geschrieben, die mir eine Excel- Datei beim erstem Load erstellt und danach in diese Datei die Arbeitszeiten einträgt (wollte meine Arbeitszeit erfassen). Zu Hause habe ich Windows 7 und alles funktioniert einwandfrei, mit der Ausnahme, dass das Excel-Programm im Task-Manager immer noch vorhanden bleibt, trotz .Quitt und .Kill. Auf der Arbeit habe ich Windows XP und die Excel-Datei wird entweder nicht erzeugt oder erzeugt nicht in dem Pfad, den ich vorgegeben habe (außerdem wollte ich Book1.xls wurde aber Mappe1.xls erstellt). Deswegen habe ich folgende Fragen:
1. wie beendet man richtig eine Office- Datei aus .Net Umgebung?
2. wo liegt der Unterschied zwischen Windows 7 und XP um eine Excel-Datei zu erzeugen und die ohne Öffnen zu beschreiben? (ob es gäbe?)
3. gibt es die Möglichkeit ein Programm aus dem Autostart- Ordner per VB- Code zu entfernen?
Vielen Dank im Voraus.
Antworten
-
Hallo,
zu 1:
Dim xl as New Excel.Application
Dim wb as Excel.Workbook
wb = xl.Workbooks.Open("C:\test.cls")
'schließen
if xl.Workbooks.count > 1 then
wb.close
else
xl.quit
end if
wb = Nothing
xl = Nothing
Zu 2.: Wenn du mit interoperability arbeitest, muss die Datei geöffnet sein. Sie ist aber nicht zwangsweise visible
xl.Visible = True 'Excel App sichtbar machen
Es gibt aber einen Unterschied: In WinXp könntest du Probleme bekommen wenn du mit GetObject versucht auf die Excel Anwendung zuzugreifen und diese noch nicht in der ROT eingetragen ist. Dieses Problem solltest du allerdings nicht haben wenn du mit Winforms arbeitest.
Zu 3:
Hab ich noch nie versucht, aber mit dem Kill-Befehl kannst du Dateien löschen
Also etwa so: Kill("Pfad\Datei.endung")
Cheers, Jörn Bosse
Microsoft Student Partner- Als Antwort vorgeschlagen Thorsten DörflerModerator Freitag, 10. Juni 2011 06:13
- Als Antwort markiert genakust Montag, 13. Juni 2011 08:05
-
Hallo,
3. gibt es die Möglichkeit ein Programm aus dem Autostart- Ordner per VB- Code zu entfernen?
Kommt drauf an welchen Autostart - Ordner Du meinst. Aus dem Startmenü des aktuellen Benutzers:IO.File.Delete(IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "programmname.lnk")
Autostart Einträge können aber auch im Autostart aller Benutzer liegen (Environment.SpecialFolder.CommonStartup ab .NET 4.0), wie auch in der Systemregistrierung (HKLM/HKCU\Software\Microsoft\Windows\CurrentVersion\Run).
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Jörn 'blackout' Bosse Freitag, 10. Juni 2011 11:46
- Als Antwort markiert genakust Samstag, 11. Juni 2011 09:24
Alle Antworten
-
Hallo,
zu 1:
Dim xl as New Excel.Application
Dim wb as Excel.Workbook
wb = xl.Workbooks.Open("C:\test.cls")
'schließen
if xl.Workbooks.count > 1 then
wb.close
else
xl.quit
end if
wb = Nothing
xl = Nothing
Zu 2.: Wenn du mit interoperability arbeitest, muss die Datei geöffnet sein. Sie ist aber nicht zwangsweise visible
xl.Visible = True 'Excel App sichtbar machen
Es gibt aber einen Unterschied: In WinXp könntest du Probleme bekommen wenn du mit GetObject versucht auf die Excel Anwendung zuzugreifen und diese noch nicht in der ROT eingetragen ist. Dieses Problem solltest du allerdings nicht haben wenn du mit Winforms arbeitest.
Zu 3:
Hab ich noch nie versucht, aber mit dem Kill-Befehl kannst du Dateien löschen
Also etwa so: Kill("Pfad\Datei.endung")
Cheers, Jörn Bosse
Microsoft Student Partner- Als Antwort vorgeschlagen Thorsten DörflerModerator Freitag, 10. Juni 2011 06:13
- Als Antwort markiert genakust Montag, 13. Juni 2011 08:05
-
Hallo,
3. gibt es die Möglichkeit ein Programm aus dem Autostart- Ordner per VB- Code zu entfernen?
Kommt drauf an welchen Autostart - Ordner Du meinst. Aus dem Startmenü des aktuellen Benutzers:IO.File.Delete(IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "programmname.lnk")
Autostart Einträge können aber auch im Autostart aller Benutzer liegen (Environment.SpecialFolder.CommonStartup ab .NET 4.0), wie auch in der Systemregistrierung (HKLM/HKCU\Software\Microsoft\Windows\CurrentVersion\Run).
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Jörn 'blackout' Bosse Freitag, 10. Juni 2011 11:46
- Als Antwort markiert genakust Samstag, 11. Juni 2011 09:24
-
Hallo Thorsten,
vielen dank für deine Antwort. Es funktioniert prima! Ich habe aber bemerkt, dass nach dem Beenden des Programms die Datei immer noch im Task-Manager zu finden ist. Ich habe versucht sie auf diese Art zu beenden, finde aber keine Lösung der Variablen "Myprocess" die Dateiname zu übergeben. Ich benutze folgende Code:
Private Sub myProcess()
Dim Myprocess As System.Diagnostics.Process
Dim prList() As Process
Myprocess = ?
prList = Process.GetProcessesByName(My.Application.Info.AssemblyName & ".exe")
For Each i In prList
Myprocess.Kill()
Next
End Sub
-
Hallo Thorsten,
das Problem existierte, weil ich Excel nicht korrekt beendet habe... Jetzt geht es:
oBook.Save()
' Datei schließen
oBook.Close()
'quit Excel
oSheet = Nothing
oBook = Nothing
' Objekt schließen
oOffice.Quit()
' Reinigung
System.Runtime.InteropServices.Marshal.ReleaseComObject(oOffice)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
oOffice = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()
-
Guten Tag,
Jetzt aber richtig:
zur 1.
oBook.Save()
' Datei schließen
oBook.Close()
'quit Excel
' Objekt schließen
oOffice.Quit()
' Reinigung
System.Runtime.InteropServices.Marshal.ReleaseComObject(oOffice)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
oSheet = Nothing
oBook = Nothing
oOffice = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()
zur Frage vom 11.06.:
Dim prList() As Process
prList = Process.GetProcessesByName(My.Application.Info.AssemblyName & ".exe")
For Each i In prList
i.Kill()
Next