in reply to Is an Excel spreadsheet open?
"Excel itself can tell" - true, but which Excel? I typically run several instances of Excel, and you will have to inspect them all to answer your question. Gargling tells me that EnumAllObjects gives only those that are already bound to Win32::OLE. I can't see any way of persuading GetActiveObject to return any instance of Excel apart from the first one it encounters. So, until you can put that in a loop to find all instances of Excel, I fear you are stuck with your test file approach. I don't like it either and could write the code for a single instance of Excel, but multiple instances are so common that I don't think you can ignore them. And Sod's Law is immutable - the last instance you find will always be the one that has the file open. I also agree with you about the impenetrability of the Win32::OLE docs.
Regards,
John Davies