Newbie: returning dynamicly built lists (using win32com) (SOLVED)

Ransom gyows at sbcglobal.net
Tue Jun 6 20:52:39 CEST 2006


Thanks folks! I had just gotten myself into a blind rut, apparently.
Adding the .Value attribute to the com object does strip all the other
messaging returning from Excel so I could then populate my list and
return out of the function normally.

I had tried that earlier, but had used the .Value attribute incorrectly
( Cells.Value(x,y) instead of Cells(x.y).Value.

Cheers,
G




Ransom wrote:
> Very newb here, but my question will hopefully be obvious to someone.
>
> Code:
>
> import string
> from win32com.client import Dispatch
> docdir = 'E:\\scripts\\Python\\RSAutomation\\'
>
> def getOldData(testcases):
>
>     excel = Dispatch("Excel.Application")
>     excel.Workbooks.Open(docdir + 'FILE.xls')
>
>     # load and create list from file (testcases.csv)
>     for rsinput in testcases.xreadlines():
>
>         inputlist = string.split(rsinput, ',')
>
>
>         # iterate through and update spreadsheet input
>         cellx = range(3,51)
>         values = range(0,48)
>         for i,r in zip(cellx, values):
>
>             excel.ActiveSheet.Cells(i,2).Value = inputlist[r]
>
>         # TODO: read output from cell 32,6 into a tuple or list and
> then return list to __main__
>
>         [THIS IS WHERE I AM HAVING A PROBLEM]
>         print excel.ActiveSheet.Cells(32,6)   <--This prints properly
> as loop executes
>
>     excel.ActiveWorkbook.Close(SaveChanges=0)
>     excel.Quit()
>
> if __name__ == "__main__":
>     csv_testcases = open('arse_testcases.csv','r')
>     getOldData(csv_testcases)
>
> OK, so what is happening is that I am sending a list of data to an
> overly complicated spreadsheet that produces it's own output (in cell
> 32,6). As I loop through multiple test cases, the print statement
> calling into COM for the cell data seems to be printing out results
> just fine. But when I try and put the output from the spreadsheet into
> a dynamic list after the TODO section thusly:
>
>         outputlist = []
>         outputlist.extend(excel.ActiveSheet.Cells(32,6)
>         return outputlist
>
> I get an error like:
> [<win32com.gen_py.Microsoft Excel 9.0 Object Library.Range instance at
> 0x15450880>]
>
> I need to be able to return the dynamically generated built up by the
> responses from the spreadsheet lookup call (the exce.Activesheet
> thingy). Is there a better way to get this dynamically built list out
> of the funtion?
> 
> Thanks!!!




More information about the Python-list mailing list