I have a data provider who provides a DDE link (that I can use in Excel) and an exe file that runs in the background which serves as a Data Manager (not sure if this is what called as a DDE Server) and the DDE link connects to that exe file.
I want to bypass Excel and work directly in Python. I saw some examples about DDE but they were all in Python 2 and I am using Python 3.
I saw examples on the net that do something like:
import win32ui
import dde
...
...
server = dde.CreateServer()
server.Create("SomeName")
...
But these examples show how to create a DDE server. In my case, there is an existing exe that is the data manager (DDE server may be?) and within Excel there is a menu via which I can get data such as
' = DataProviderFunc1(Param1, Param2)'
' = DataProviderFunc2(Param1, Param2)'
I want to write a code in Python that directly gets output of ' = DataProviderFunc1(Param1, Param2)'
etc., instead of having an Excel sheet open and then letting Python read the output from the Excel sheet.
Is this possible?
I am using Python 3.4. Thanks
There seems to be very little document on the DDE module, e.g. http://docs.activestate.com/activepython/2.4/pywin32/dde.html
The closest things to documentation that I've found are here: client example, server example
The examples aren't even commented so let me share what I've figured out with a commented example:
import win32ui
import dde
#apparently "servers" talk to "servers"
server = dde.CreateServer()
#servers get names but I'm not sure what use this name
#has if you're acting like a client
server.Create("TestClient")
#use our server to start a conversation
conversation = dde.CreateConversation(server)
# RunAny is the server name, and RunAnyCommand is the topic
conversation.ConnectTo("RunAny", "RunAnyCommand")
# DoSomething is the command to execute
conversation.Exec("DoSomething")
# For my case I also needed the request function
# request somedata and save the response in requested_data.
requested_data = conversation.Request("somedata")
Key functions seem to be Exec and Request. Both take strings so in your particular case you'll have to find out what your server wants.