2015-03-08 6 views
6

У меня есть поставщик данных, который предоставляет ссылку DDE (которую я могу использовать в Excel) и exe-файл, который работает в фоновом режиме, который служит диспетчером данных (не уверен, что это это то, что называется DDE-сервером), а ссылка DDE подключается к этому файлу exe.Получить данные через DDE в Python путем обхода Excel

Я хочу обойти Excel и работать непосредственно в Python. Я видел несколько примеров о DDE, но все они были в Python 2, и я использую Python 3.

Я видел примеры на сети, которые делают что-то вроде:

import win32ui 
import dde 
... 
... 
server = dde.CreateServer() 
server.Create("SomeName") 
... 

Но эти примеры показывают, как создать DDE-сервер. В моем случае, есть существующий ехе, который является менеджером данных (сервер DDE может быть?) И в Excel есть меню, через которую я могу получить данные, такие как

' = DataProviderFunc1(Param1, Param2)' 
' = DataProviderFunc2(Param1, Param2)' 

Я хочу написать код Python, который напрямую выводит ' = DataProviderFunc1(Param1, Param2)' и т. Д., Вместо того, чтобы открыть лист Excel, а затем позволить Python читать вывод из листа Excel.

Возможно ли это?

Я использую Python 3.4. Спасибо

В модуле DDE имеется очень маленький документ, например. http://docs.activestate.com/activepython/2.4/pywin32/dde.html

+1

Вы когда-нибудь находили свой ответ? –

ответ

0

Ближайшие вещи к документации, которую я нашел здесь: client example, server 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") 

Ключевые функции выглядят как Exec и Request. Оба берут строки, поэтому в вашем конкретном случае вам нужно будет узнать, чего хочет ваш сервер.