[python-win32] Excel "stopped working" after reading in sheet names
Mark Mordeca
mark.mordeca at prosensus.ca
Tue May 31 17:26:17 CEST 2011
Thanks for your reply Tim.
"* I couldn't reproduce the crash after a few times on my Win7 x64 with
Office 2003, Python 2.7, pywin32 2.1.4. I note that you said it only
crashed 1 time in 3 so perhaps I didn't try hard enough, but there
may be some version-sensitivity there as well."
I am using Office 2007, opening a 2003 file, with Python 2.5. My version
of pywin32 is build 214. I think that is the same as 2.1.4?
Sometimes it did take me a while to get it to come up, so I am not
surprised if it didn't come up for you (if it will happen at all). I have
had it several times in a row though.
"* In general, you don't need to go unsetting sheet or book or whatever
(unless you have some requirement which is unstated here). If you
get rid of the "sheet=None" etc. lines, does the crash still occur?"
I removed the "=None" lines as you suggested. It took me many more tries
than before to get the error to come up, but eventually it did.
"* The underlying problem is almost certainly going to be a subtle
timing interaction around the refcounting on the pywin32 CDispatch
objects which are proxying for the underlying Windows objects.
It's a maze of twisty passages, so I'll let Mark or Roger comment
if they think there's something to be said."
If this is true, I hope to get some advice on how to correct the problem.
My previous implementation opened the Excel file at a previous point in
the program, then later read in the sheets, and then even later closed the
file, with possible minutes in between each of these. I never saw the
error with this implementation, however it gave the opportunity to the
user to interact with their own instance of Excel, potentially causing
problems for the instance I created (previous mailing list e-mail:
http://mail.python.org/pipermail/python-win32/2011-May/011494.html). So I
had to change it so that the new Excel is opened to get the sheet names
and then immediately closed.
Again, thanks for your response. Any help is appreciated.
Mark
-----Original Message-----
From: python-win32-bounces+mark.mordeca=prosensus.ca at python.org
[mailto:python-win32-bounces+mark.mordeca=prosensus.ca at python.org] On
Behalf Of Tim Golden
Sent: Tuesday, May 31, 2011 4:09 AM
To: python-win32 at python.org
Subject: Re: [python-win32] Excel "stopped working" after reading in sheet
names
On 30/05/2011 21:26, Mark Mordeca wrote:
> Greetings,
>
> I would appreciate any help I could get with the following problem. 30%
> of the time after running the following code to get the sheet names out
> of an excel file, I will receive a windows error saying that "Microsoft
> Office Excel has stopped working".
A few points:
* The underlying problem is almost certainly going to be a subtle
timing interaction around the refcounting on the pywin32 CDispatch
objects which are proxying for the underlying Windows objects.
It's a maze of twisty passages, so I'll let Mark or Roger comment
if they think there's something to be said.
* I couldn't reproduce the crash after a few times on my Win7 x64 with
Office 2003, Python 2.7, pywin32 2.1.4. I note that you said it only
crashed 1 time in 3 so perhaps I didn't try hard enough, but there
may be some version-sensitivity there as well.
* In general, you don't need to go unsetting sheet or book or whatever
(unless you have some requirement which is unstated here). If you
get rid of the "sheet=None" etc. lines, does the crash still occur?
* As an aside: your for sheet in book.Sheets: loop is basically a
list comprehension in disguise:
sheetList = [sheet.Name for sheet in book.Sheets]
Some people don't feel comfortable with list comps which may be your
case. But just in case you weren't even aware of the possiblility, I
thought I'd offer it for your further englightenment :)
TJG
_______________________________________________
python-win32 mailing list
python-win32 at python.org
http://mail.python.org/mailman/listinfo/python-win32
More information about the python-win32
mailing list