Wie zum ausführen von excel-vba-code von einem Windows-Dienst
Ich möchte einige excel-vba-code von meinem Windows-Dienst. Der Service ist mit einem fileSystemWatcher überwachen Sie ein Verzeichnis für die xml-Datei Hinzugefügt werden. Sobald eine Datei Hinzugefügt wird, der Inhalt der xml-Datei deserialisiert wird in den Objekt Eigenschaften. In dieser Phase will ich öffnen einer excel-Datei und übergeben Sie diese Werte in bestimmten Zellen und die Ausführung von vba-code aus, dass die Arbeit Buch. Ich habe diese arbeiten perfekt in einer windows forms-Anwendung aber ich kann ihn von meinem Windows-Dienst-Anwendung. Ich legte einen debugger an die Anwendung, um zu versuchen und sehen, was passiert war, aber es wurden keine Fehler geworfen und alle Schritte erfolgreich abgeschlossen. Ich kenne einen Windows-Dienst unterstützt nicht das öffnen von MS Office-Dateien gibt es Probleme mit der Interaktion mit der Benutzeroberfläche und der Benutzer Berechtigungen hat. Aber ich bin auf der Suche nach einer Arbeit um jeden Weg, um in der Lage sein, diese zu bekommen vba-code, die von einem service. Ich bin mit Windows 7 Home Premium 32 bit und ich habe meine Rechnung für meinen service set LocalSystem.Dies ist der code, den ich verwende:
private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
{
Trade t;
XmlSerializer serializer;
XmlReader reader;
XmlWriter writer;
string filePath = @"C:\Inbox\TradeInfo.xml";
serializer = new XmlSerializer(typeof(Trade));
reader = XmlReader.Create(filePath);
t = (Trade)serializer.Deserialize(reader);
reader.Close();
string path=@"C:\Windows\System32\config\systemprofile\Desktop\TwsDde.xls";
oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = true;
oXL.DisplayAlerts = false;
mWorkBook = oXL.Workbooks.Open(path,2, false, 5, "", "", true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true,false, false);
//Get all the sheets in the workbook
mWorkSheets = mWorkBook.Worksheets;
//Get the allready exists sheet
mWSheet1=(Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("Basic Orders");
//Microsoft.Office.Interop.Excel.Range range= mWSheet1.UsedRange;
mWSheet1.Cells[12, 1] = "GE";
mWSheet1.Cells[12, 2] = "STK";
mWSheet1.Cells[12, 7] = "SMART";
mWSheet1.Cells[12, 9] = "USD";
mWSheet1.Cells[12, 12] = "Buy";
mWSheet1.Cells[12, 13] = "100";
mWSheet1.Cells[12, 14] = "MKT";
Excel.Range range;
Excel.Range row;
range = mWSheet1.get_Range("A12", "O12");
range.EntireRow.Select();
oXL.Run("TwsDde.xls!Sheet2.placeOrder");
}
Jegliche Hilfe würde sehr geschätzt werden. Oder alternative Wege, die gleiche Sache zu tun ich.e läuft ein windows form, die diesen code enthält vielleicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie versuchen zu tun, ist nicht unterstützt:
Können Sie in Excel Vorgänge automatisieren können, wenn der Prozess ausgeführt wird in einem interaktiven desktop. Versuche das automatisieren von Excel von einem nicht interaktiven desktop (z.B. aus einer session) werden nicht unterstützt und verursacht einen Fehler.
Hallo ich es geschafft, diese Arbeit in eine Art Runde über Weg. Im wesentlichen habe ich folgte diesem tutorial und den code auf starten Sie einen interaktiven Prozess von einem Dienst, um den service zu laufen als SYSTEM-Benutzer, sondern übernehmen die session-ID für die erste angemeldete Benutzer und gewähren Sie dem Benutzer Administratorrechte zum ausführen von interaktiven Prozessen, wie GUI-Anwendungen. Öffnen Sie excel und ein makro ausführen, die über einen Windows service, den ich schrieb zuerst alle code, dies zu tun in einer Windows Forms-Anwendung getestet und es funktionierte dort zunächst. Ich änderte dann die ausführbare Datei und es funktionierte perfekt. Ich hoffe, dies hilft jemand anderes mit dem gleichen problem.
Excel arbeitet schön unter Benutzer-service ohne "desktop-Interaktion" aktiviert ist.
Ersten, Die standard-Möglichkeiten, um die Erstellung von Excel-COM funktioniert nicht unter service. Sie müssen starten Excel.exe Prozess von der Sie Programm - ShellExecuteEx(empfohlene Methode) oder CreateProcess(nicht unbedingt empfehlenswert), es zu tun.
Zweiten Bühne: Befestigen zu Excel COM-Application-Objekt mit GetActiveObject. Jetzt können Sie richtig Zugriff auf alle Excel-COM-Schnittstellen.
Auch in mehreren Betriebssystemen die Excel möglicherweise nicht richtig funktionieren, Absturz unter dem LocalSystem-Konto - um dies zu korrigieren manuell erstellen, 2 Ordner:
C:\Windows\system32\config\systemprofile\desktop
C:\Windows\SysWow64\config\systemprofile\desktop
Andere Fehler unter service ohne desctop interagieren die Excel in der ersten Zeit zu Fragen, die Anmeldeinformationen des Benutzers und Frost in Erinnerung. Können Sie es deaktivieren in der registry oder ein interface (siehe Excel-Hilfe). Weitere Informationen über das starten von Prozessen ist es.