以下是我用于通过DDE服务器(在本例中为Bloomberg数据提供程序DDE Server)从提供程序获取数据的一些VBA代码:
Sub bloom_get()
nChan = DDEInitiate("BLP", "S")
sSecurity1 = "JBIG Index" & ", [MLI_DATE=" & datestr & ",MLI_TOT_RTN_LOC="", MLI_PX_RTN_LOC="", MLI_EFF_DUR=""]"""
vrtResult1 = DDERequest(nChan, sSecurity1)
MsgBox (vrtResult1(1) & " " & vrtResult1(2) & " " & vrtResult1(3) & " " & vrtResult1(4) & " ")
DDETerminate (nChan)
End Sub
我正在寻找一种从python代码调用这样一个DDE服务器的方法。
这段代码在某种程度上对Bloomberg DDE服务器是特定的,但即使你能为我提供一个非常有用的更通用的方法。我根本不知道如何解决这个问题,因为DDE是微软的应用程序细节。
可以帮助的事情之一:
编辑:不,请求的数据不能通过官方API获取。
由于
答案 0 :(得分:1)
好的,所以这三种方法DDExxx实际上是Excel.Application对象的方法,但是传统上是省略的,所以实际上你的代码实际上可以这样表达
Sub bloom_get()
nChan = Application.DDEInitiate("BLP", "S")
sSecurity1 = "JBIG Index" & ", [MLI_DATE=" & datestr & ",MLI_TOT_RTN_LOC="", MLI_PX_RTN_LOC="", MLI_EFF_DUR=""]"""
vrtResult1 = Application.DDERequest(nChan, sSecurity1)
MsgBox (vrtResult1(1) & " " & vrtResult1(2) & " " & vrtResult1(3) & " " & vrtResult1(4) & " ")
Application.DDETerminate (nChan)
End Sub
所以现在你需要掌握一个Excel.Application对象。 StackOverflow在这里有一些代码Driving Excel from Python in Windows
所以makepy.py "Microsoft Excel 11.0 Object Library"
的初始步骤是将Excel类型库导入到Python库中,然后一些Python代码看起来像这样(我可以承认我不会编写Python而是快速使用Google搜索,我可以猜猜)
Import ctypes
from win32com.client import Dispatch
MessageBox = ctypes.windll.user32.MessageBoxA
xlApp = Dispatch("Excel.Application")
#hide app and alerts
xlApp.Visible = 0
xlApp.Application.DisplayAlerts = 0
nChan = xlApp.Application.DDEInitiate("BLP", "S")
time.sleep(1) # wait for the dde to load
sSecurity = t + ", [MLI_DATE=" + datestring + "," + fieldstring + "=""]"""
vrtResult = xlApp.DDErequest(nChan, sSecurity)
所以有些解释,VBA MessageBox与Python的 you'll need to import a Window's API MessageBox不同(因此前3行)。 Python将字符串与+
连接,而不是与&符号&
连接。字符串可以用单引号和双引号分隔。使用方括号访问数组。此外,您还有其他SO问题中的COM Dispatch接口代码。我无法运行此代码,因为我没有Bloomberg。
有些Python程序员可能需要整理一些。