Daten an Excel senden
-
Donnerstag, 4. Oktober 2012 15:44
Hallo,
ich habe folgenden Zustand: Mit einem alten Programm, was DDE verwendet, empfange ich Daten von einer seriellen Schnittstelle (derzeit Waagen). Diese werden per DDE nach Excel gesendet. Excel empfängt diese Daten und trägt diese in die Zellen ein. Das besondere ist, dass Excel bei bestimmten Werten bestimme Aktionen auslöst (Wechsel der Zelle, …). Alle Funktionen laufen also in VBA ab.
Mein Problem: Für jede Schnittstelle muss das Programm gestartet werden. Also mehrere Schnittstellen, mehrere Programme in der Taskleiste. Um das zu verhindern wollte ich ein Programm schreiben, welches im Systemtray liegt (das funktioniert). Dieses Programm soll den Zahlenwert der jeweiligen Waage empfängen (das funktioniert auch) und an Excel weiterschicken. Das senden wollte ich per DDE machen (das geht nicht mehr).
Frage: Wie kann ich am einfachsten einen Zahlenwert per OLE/ODBDE??? von meinen Programm an Excel senden.
Kurz der gewünschte Ablauf: An der Waage auf "senden" drücken -> Excel fügt den Wert in die aktive Zelle ein, ohne irgendwelche Tasten am PC zu bedienen!
Alle Antworten
-
Donnerstag, 4. Oktober 2012 15:54
Hallo Oliver,
wenn die Exceldatei als kleine Datenbank gesehen werden kann, ist es problemlos möglich, mit OleDb und SQL auf die Exceldatei zuzugreifen, dort Werte zu lesen, zu editieren, einzufügen, ...
Ein Beispiel findest Du hier:
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Montag, 29. Oktober 2012 08:32
-
Sonntag, 7. Oktober 2012 18:10
Hallo Stafen,
erst einmal vielen Dank für Deine schnelle Antwort. Der Ansatz der dort beschrieben wird, ist schon interessant. Leider muss ich Zellen direkt ansprechen können. Nach langem suchen fand ich an dieser Stelle (http://support.microsoft.com/kb/316126) einen weiteren Vorschlag.
Dieser hat den Vorteil, dass man hier schon die Zelle vorgeben kann, in die der Wert eingetragen werden soll. Leider hat diese Lösung auch einen kleinen Haken. Ich muss meinen Programm sagen, wie die schon existierende Datei (das mag ja noch gehen, also immer gleich einen Dateinamen vergeben) heißt (und hier liegt ein kleines Problem).
Ich stelle mir so den Ablauf vor: Aktives Fenster ermitteln, prüfen, ob es Excel ist und anschließend den Dateinamen der offenen Datei ermitteln. Die ersten beiden Schritte sind derzeit kein Problem. Nur bei dem ermitteln des Dateinamen mit Pfad hab ich noch nicht so richtig eine Idee. Vielleicht gibt es dazu eine Lösung.
Nette Grüße
Oliver
-
Freitag, 26. Oktober 2012 19:41Besitzer
Nur bei dem ermitteln des Dateinamen mit Pfad hab ich noch nicht so richtig eine Idee. Vielleicht gibt es dazu eine Lösung.
Hallo Oliver Jurisch,
Was man von dem folgenden Artikel lesen kann ist folgendes: „It is a common problem if the user typically doesn't have his workbook windows maximized, because all instances of Excel will then have the same caption of "Microsoft Excel." … Understanding and Using Windows API Calls for Excel Programming
Um den Dateinamen mit Pfad zu ermitteln muss man erstmals auf das Workbook kommen und dort hat man dann die Eigenschaft FullName: http://msdn.microsoft.com/en-us/library/office/ff834975.aspx
[VB Code als Idee – nicht perfekter Code: funktioniert nur wenn Excel und Visual Studio nicht mit Admin-Rechte gestartet sind]
Grüße,
Robert
ImportsSystem.Runtime.InteropServicesImportsSystem.ThreadingImportsExcel = Microsoft.Office.Interop.ExcelPublicClassForm1PrivateSubButton1_Click(senderAsSystem.Object, eAsSystem.EventArgs)HandlesButton1.ClickDimxlProcessesAsProcess() = Process.GetProcessesByName("EXCEL")DimxlAppAsExcel.ApplicationDimxlFileNameAsStringDimxlFullPathAsStringIfxlProcesses.Length = 0ThenDimxLAsProcess = Process.Start("EXCEL")Thread.Sleep(500)ElseAppActivate(xlProcesses(0).Id)TryxlApp =CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)CatchexAsExceptionMsgBox(ex.Message)ExitSubEndTryEndIfxlFileName = xlApp.ActiveWindow.CaptionxlFullPath = xlApp.ActiveWorkbook.FullName'//http://msdn.microsoft.com/en-us/library/office/ff834975.aspxConsole.WriteLine(xlFullPath)xlApp =NothingEndSubEndClassRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Montag, 29. Oktober 2012 08:33Besitzer
Hallo Oliver Jurisch,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

