Integrate a GUI in a excel sheed
stacom at stacom-software.de
Wed Feb 19 09:15:21 CET 2003
Brian Kelley schrieb:
> I have actually done this and it wasn't very easy. The basic steps that
> I took were as follows.
> Excel --> Visual Basic Wrapper --> Python COM Server --> os.spawn
> Remote wxPython GUI application
> Spawning the GUI doesn't block the COM server which is essential.
> Otherwise EXCEL hangs very hard.
> So getting the data into the remote GUI was fairly easy. The hard part
> was letting the COM server "know" where the GUI app was located so it
> could be launched from a system call. I used the windows registry for
> this purpose and my had installer write the location of the gui app.
> Now the hard part, what about getting data *back* into excel?
> When the GUI is called it is sent the Active workbook and worksheet
> numbers along with any relavant cell information and data. If the
> remote GUI has the workbook and worksheet it can write any desired
> information back to excel.
> >>> ms = client.Dispatch("Excel.Application")
> >>> book = ms.Workbooks(1) # appropriate workbook #
> >>> book.Worksheets(1) # appropriate sheet #
> >>> sheet = book.Worksheets(1)
> >>> sheet.Cells(1,1).Value = "foo"
> What are the problems with this approach? wxPython startup times are
> abyssmal and the overhead is huge about 10MB. The COM server doesn't
> talk to the GUI so EXCEL really can't inspect any GUI states. You could
> fix this by letting the COM Object query the GUI through a socket or
> file based interface
> I think that this approach would be pretty good for your application.
> You aren't really "embedding" wxPython into excel, merely launching it
> with a mechanism for excel automation.
> I actually just submitted a proposal for a Python tutorial for this at
> PyCON so I'm delighted to see that someone may actually use it :) Even
> if I don't do the tutorial I will be writing up the whole processes.
> Feel free to ask any more questions if you are interested. I am
> actually using this approach in a commercial product (which means that I
> feel relatively confident that it is stable)
Thanks for your project description. I thought it "should" be possible in the way you did it. I think our applications are quite similar.
I'm working on the approach with myApplication-COM-server and IP commun. to a GUI appl. After the user has finished his configuration in the GUI appl. i get back with the data into excel to show him his entered data, instead of a graph-widget.
What I'm wondering is, if I startup a python app, and create a excel-COM-obj. a new process is launched, but when i create a python-COM-obj. in excel it is dynamically linked in the excel process.
In the prog. on python book (p. 197) this is covered with "LocalServer" and "InProc" server, but i didn't have the time yet to work it out. Have you ever thought about that for your appl.?
More information about the Python-list