Hi there,
I am working on an EXCEL wrapper to "phytonize" access to EXCEL.
I create a wrapper class for all objects classes derived from abasic
wrapper class which mainly ensures that calls are snaked-case and
pyhtonized calls work. I. e. workbokkobject.SaveAs,
workbookobject.saveas and workbokkobject.save_as would all work. This is
done by overloaded __getattr__ and __setattr__ methods.
The "real" EXCEL object is stored in the attribute "_xlWrapped".
The overloaded __getattr__ also ensures that when retrieving f. e. a
workbook from the application wrapper, that the resulting EXCEL object
is wrapped as well. I. e. let xlapp be my wrapped EXCEL then
xlapp.active_workbook would return a reference to a wrapped Workbook
object which contains the reference to the "real" EXCEL workbook object
in the attribute _xlwrapped.
I also overload __getitem__ to allow xlapp[1] as short for
xlapp.workbooks(1).
Some of these classes I do extend for example to check existence of a
worksheet in a workbook.
This as very brief introduction.
Now I am struggeling with list comprehension and indexes.
# access un-wrapped EXCEL
print(xlapp._xlWrapped.Workbooks(1).Name)
print(xlapp._xlWrapped.Workbooks(2).Name)
for i, wb in enumerate(xlapp._xlWrapped.Workbooks):
print(i, wb.Name)
# access wrapped EXCEL
print(xlapp.Workbooks(1).Name)
print(xlapp.Workbooks(2).Name)
for i, wb in enumerate(xlapp.Workbooks):
print(i, wb.Name)
This prints
WB1.xls
WB2.xls
0 WB1.xls
1 WB2.xls
WB1.xls
WB2.xls
and aborts with an windows/COM error:
ret = self._oleobj_.InvokeTypes(170, LCID, 2, (13, 0), ((12, 1),),Index
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0,
None, None, None, 0, -2147352565), None)
Obviously when looping via the wrapper object the index is not
automatically adjusted.
However, I must not increase the index by on in __getitem__ because then
the index would alway be increased.
It seems, püywin32 has some special support for list comprehension and
index adjustment for COM objects?
I haven't worked with an iterator before but is this the solution?
Thanks in advance.
Best
Christoph
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32