Excel Ranges from Python COM server

Don don_b at my-deja.com
Tue Feb 1 16:13:25 CET 2000

I am having trouble setting getting data from Python to set a range in
Excel VBA.  From Python I can manipulate Excel ranges as tuples of
tuples, just fine.  But I am doing something wrong calling Python from
VB.  The following example demonstrates my problem.

An Excel Range gives me a Python tuple of tuples in Python, but a Python
typle of tuples is not an Excel Range in Excel.  What should my
function, getRange return?

>>> import win32com.client
>>> xl = win32com.client.Dispatch("Excel.Application.9")
>>> xl.Workbooks.Add()
<COMObject <unknown>>
>>> xl.Visible = 1
>>> xl.Range("A1:B2").Value
((None, None), (None, None))
>>> data = (('one','two'),('three','four'))
>>> xl.Range("A1:B2").Value = data
>>> xl.Range("A1:B2").Value
((L'one', L'two'), (L'three', L'four'))

However, if I make a simple Python COM server...

class RangeTest:
    _public_methods_ = ['getRange']
    _reg_progid_ = "test.rangeTest"
    # print pythoncom.CreateGuid()
    _reg_clsid_ = "{F3514F94-D8B1-11D3-8A13-00A0244A1060}"

    def getRange(self):
        return (("one","two"),("three","four"))

if __name__ == '__main__':
    import win32com.server.register

>From an Excel spreadsheet I call...

Sub rangeTest()
    Dim py As Object
    Set py = CreateObject("test.rangeTest")
    Range("A1:B2").Value = py.getRange()
End Sub

The results in my spreadsheet are...
	A	B
1	one	two
2	one	two

BUT, what I wanted to have in the spreadsheet was...
	A	B
1	one	two
2	three	four

Sent via Deja.com http://www.deja.com/
Before you buy.

More information about the Python-list mailing list