|
VB.Net-Forum - Beitragsübersicht - |
|
Von |
engelinzivil |
Datum |
24. Februar 2016 um 00:05:32 |
Frage |
Grüezi mittenand,
Also Folgendes: Ich habe hier ein Protokollformular als Excel datei. Darin werden u.a. Namen, Kilometerstände, Fahrzeuge, und einige andere Dinge eingetragen und Protokolliert. Diese Datei hat 2 Arbeitsblätter, "Seite 1" und "Seite 2" genannt. Nach dem Eintragen der Werte muss die Datei mit Datum und einer Fortlaufenden Nummer gespeichert, Gedruckt(Beidseitiger druck, also beide Arbeitsblätter auf ein Blatt Papier), und per Outlook als mail Versendet werden.
Diesen Vorgang will ich nun automatisieren.
Problem 1 und 2, also wie ich die Werte in die Tabelle Schreibe, und das Dokument Speichere, habe ich bereits erfolgreich gelöst:Dim oExcel As Object = Nothing Dim oBook As Object = Nothing Dim oSheet As Object = Nothing Try oExcel = GetObject(, "Excel.Application") Catch ex As Exception Try oExcel = CreateObject("Excel.Application") Catch ex1 As Exception MsgBox("Applikation nicht installiert!", _ MsgBoxStyle.Critical, "Error") End Try End Try oExcel.Visible = True ' zu Testzwecken oBook = oExcel.Workbooks.Open("F:\Protokoll.xlsx") oSheet = oBook.Worksheets("Seite 1") 'tag/Zeit oSheet.Range("C2").Value = txtC2.Text oSheet.Range("K2").Value = txtZeit.Text 'Hier kommen jetzt ca. 30 weitere "Übertragungen" oSheet = oBook.Worksheets("Seite 2") oSheet.Range("D1").Value = txtD1.Text oSheet.Range("D3").Value = txtD3.Text 'Und hier nochmal etwa 15 "Übertragungen" Try oBook.SaveAs("F:\protokollTest.xlsx") 'Der Dateiname wurde lediglich für debugzwecke gewählt und wird noch mit einer Routine versehen Catch MsgBox(Prompt:="Datei bereits Vorhanden") End Try chkSpeichern.Checked = True If chkAnzeigen.Checked = False Then oBook.Close(True) oExcel.Quit() End If oSheet = Nothing oBook = Nothing oExcel = Nothing GC.Collect() GC.WaitForFullGCComplete() Das ganze Funktioniert auch ganz gut und zuverlässig, soweit ich das bisher beurteilen kann.
Problem 3: Die Datei per Outlook 2013 Versenden:
Laut der MSDN soll folgender Code Funktionieren: Sub Main() ' Create an Outlook application. Dim oApp As Outlook._Application oApp = New Outlook.Application() ' Create a New MailItem. Dim oMsg As Outlook._MailItem oMsg = oApp.CreateItem(Outlook.OlItemType.olMailItem) oMsg.Subject = "Send Attachment Using OOM In Visual Basic .NET" oMsg.Body = "Hello World" & vbCr & vbCr ' TODO: Replace With a valid e-mail address. oMsg.To = " user@example.com" ' Add an attachment ' TODO: Replace With a valid attachment path. Dim sSource As String = "C:\Temp\Hello.txt" ' TODO: Replace With attachment name Dim sDisplayName As String = "Hello.txt" Dim sBodyLen As String = oMsg.Body.Length Dim oAttachs As Outlook.Attachments = oMsg.Attachments Dim oAttach As Outlook.Attachment oAttach = oAttachs.Add(sSource, , sBodyLen + 1, sDisplayName) ' Send oMsg.Send() ' Clean up oApp = Nothing oMsg = Nothing oAttach = Nothing oAttachs = Nothing End Sub ( https://support.microsoft.com/de-de/kb/313803)
Ich habe wie angegeben die Objektbibliothek Importiert, aber es wird Trotzdem der Fehler "Der Typ Outlook.Application ist nicht definiert." Geworfen. Leider konnte ich noch nicht in erfahrung Bringen, woran das liegt...
Nun zum Letzten Problem:
Problem 4:
Ich muss die (Zuvor gespeicherte) Excel Datei an den Standarddrucker Senden, mit der AKTIVIERTEN Option "Alle Arbeitsblätter, Beidseitiger Druck".
Durch Längere Suche habe ich folgendes gefunden: ' Excel-Tabelle drucken Dim PfadZuExcel As String Dim x As Long PfadZuExcel = AnwendungFuerDatei(sFilename) With Text1 x = Shell(PfadZuExcel, vbHide) On Local Error Resume Next .LinkMode = 0 .LinkTopic = "Excel|system" .LinkMode = 2 .LinkExecute("[Open(""" + sFilename + _ """)][Print()][quit()]") End With Allerdings werde ich daraus nicht schlau, wieso ich da eine Textbox verwenden soll oder wie das überhaut geht... In einem Anderen Forum fand ich das hier: 'Dim wApp As New Excel.Application 'With wApp ' .Visible = True ' .Documents.Open(GewählteEXEDatei) ' .ActiveDocument.PrintOut() ' .ActiveDocument.Close(False) ' .Quit() 'End With Hier kommt allerdings wieder die Tatsache zum Tragen, dass Trotz der Importierten Objektbibliothek das Excel.Application- Objekt nicht erkannt wird.
So, ich hoffe, dass ich das ganze jetzt nicht allzu sehr aufgebläht hab, und sich jemand wirklich die mühe machen will, das alles zu lesen xD
Viele Grüße, Bis bald,
engelinzivil |
|
[ Antwort schreiben | Zurück zum VB.Net-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|