http://www.jose.it-berater.org/ 2009/5/27 Richard Quadling <rquadling@xxxxxxxxxxxxxx>: > 2009/5/25 Faubry, Samuel <Samuel.Faubry@xxxxxxxxxxx>: >> Hi Richard, >> >> Sorry for not replying earlier, I've had other duties to take over. >> >> Can you tell me from where you took the excerpts of documentation you >> sent me in your last e-mail ? Because they are consistent with the >> behaviour I observe, but not with the documentation on MSDN, so >> apparently your documentation is more reliable. >> >> Thanks, >> >> Samuel >> >>> -----Original Message----- >>> From: Richard Quadling [mailto:rquadling@xxxxxxxxxxxxxx] >>> Sent: Tuesday, May 19, 2009 5:28 PM >>> To: Faubry, Samuel >>> Cc: php-windows@xxxxxxxxxxxxx >>> Subject: Re: Excel OLE Automation using COM: file >>> access problem >>> >>> 2009/5/19 Faubry, Samuel <Samuel.Faubry@xxxxxxxxxxx>: >>> >> From: Richard Quadling >>> >> 2009/5/18 Faubry, Samuel <Samuel.Faubry@xxxxxxxxxxx>: >>> >> > Hi, >>> >> > >>> >> > I am interfacing PHP and Excel to build a web-based >>> >> reporting tool. I am running IIS6.0 with PHP 5.2.5 on >>> Windows Server >>> >> 2003, with Office 2003 installed. >>> >> > >>> >> > For testing purpose, I wrote a script that just connects to >>> >> Excel, opens a workbook, saves it under another name and >>> closes Excel: >>> >> > >>> >> > $if_path = 'C:\if_test.xls'; >>> >> > $of_path = 'C:\of_test.xls'; >>> >> > >>> >> > echo date('H:i:s') . " Launch Excel application \n"; $excelApp = >>> >> > new COM("Excel.Application") or die("Cannot >>> >> create an Excel object"); >>> >> > echo date('H:i:s') . " Loaded Excel, version >>> >> {$excelApp->Version}\n"; >>> >> > >>> >> > echo date('H:i:s') . " Open workbook at path $if_path\n"; >>> >> > $excelApp->Workbooks->Open($if_path, 2); >>> >> > >>> >> > echo date('H:i:s') . " Save changes to $of_path\n"; >>> >> > $excelApp->Workbooks[1]->SaveAs($of_path); >>> >> > >>> >> > echo date('H:i:s') . " Close Excel\n"; $excelApp->Quit(); >>> >> > >>> >> > When I open the page in Internet Explorer, if I put >>> >> "http://localhost/test.php", everything works fine, but if I put >>> >> "http://my_server_name.domain.int/test.php", the script is blocked >>> >> when trying to open the file, which means I can't access >>> the script >>> >> elsewhere than on the server. >>> >> > >>> >> > By "blocked", I mean no error is shown, but it doesn't >>> >> react, and the excel.exe task keeps running and keeps the >>> file locked. >>> >> > >>> >> > My guess is that Excel is run with different permissions in >>> >> the second case, so it cannot access the file, but it might be >>> >> completely something else... >>> >> > >>> >> > Does someone have any experience in that matter ? >>> >> > >>> >> > Thank you very much ! >>> >> > >>> >> > >>> >> >>> >> If it is permissions, TEMPORARILY, allow IIS to interact with the >>> >> desktop. Hopefully you can RDP to the server as the >>> console and see >>> >> what error message pops up (if any). >>> >> >>> >> As PHP and excel run on the server, you will need to see >>> the server >>> >> for any errors that can be displayed in this regard. >>> >> >>> >> I don't think you'll be able to do this on server 2008 as the >>> >> "console" is no longer displayed (session 0 is purely for internal >>> >> use only - services and the like - and no display is allowed). >>> >> >>> >> >>> >> -- >>> >> ----- >>> >> Richard Quadling >>> >> Zend Certified Engineer : >>> >> http://zend.com/zce.php?c=ZEND002498&r=213474731 >>> >> "Standing on the shoulders of some very clever giants!" >>> >> >>> > >>> > Hi, thanks for your reply, Richard. >>> > >>> > I RDP'd to the server console, but no error pops up. I >>> allowed IIS to >>> > interact with the desktop, but I didn't change anything. >>> > >>> > I might have found the problem: the file I am trying to open has >>> > external links. With a "normal" file it works fine whatever >>> way I run >>> > the script. >>> > >>> > That's why I used the second argument (UpdateLinks) in the >>> Open call >>> > documented here (2 means "Never update links for this workbook on >>> > opening"): >>> > >>> http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel >>> > .w >>> > orkbooks.open(office.11).aspx >>> > >>> > Apparently, the argument I passed (2 of PHP type integer) >>> is invalid. >>> > Let me explain why I think so: >>> > In the following, I am running everything from >>> > http://localhost/test.php, which allows user interaction. >>> > If I put $excelApp->Visible = 0 and use 2 as the >>> UpdateLinks argument >>> > to Open, everything runs fine without any interaction with the user. >>> > If I put $excelApp->Visible = 1 and use 2 as the >>> UpdateLinks argument >>> > to Open, Excel shows up and tells me the links could not be >>> updated, >>> > which means it tried to update it, which is NOT the >>> expected behaviour! >>> > The values 1, 2 and 3 all give the same result, which is >>> contradictory >>> > with the documentation (1 is "ask", 2 is "do not update" >>> and 3 is "do >>> > update"). >>> > If I put 0, Excel shows up and closes without any >>> interaction, but 0 >>> > is not an authorised value according to the documentation. >>> > Any other value crashes the script. >>> > If I don't specify this argument, Excel shows up and asks >>> me if I want >>> > to update, which is the expected behaviour. >>> > >>> > According to the documentation, this UpdateLinks argument is an >>> > Object, maybe that's where the problem lies? If so, how can >>> I create >>> > the object to be passed as an argument to Open? >>> > >>> > By the way, just out of curiosity, I tried to use the value >>> 0 and run >>> > the script from a client computer, but it is still blocked >>> in the way >>> > described above. >>> > >>> > Thanks for your help ! >>> > >>> >>> A couple of things (taken as snippets from the online help >>> and looking through the type library) ... >>> >>> AskToUpdateLinks Property >>> See AlsoApplies ToExampleSpecificsTrue if Microsoft Excel >>> asks the user to update links when opening files with links. >>> False if links are automatically updated with no dialog box. >>> Read/write Boolean. >>> >>> Example >>> This example sets Microsoft Excel to ask the user to update >>> links whenever a file that contains links is opened. >>> >>> Application.AskToUpdateLinks = True >>> >>> >>> >>> Do you have any macros as part of the file you open? If they >>> present dialogs, maybe they need to be suppressed also? >>> >>> Application.DisplayAlerts = False >>> Workbooks("BOOK1.XLS").Close >>> Application.DisplayAlerts = True >>> >>> >>> >>> Application.Workbooks.Open >>> >>> UpdateLinks Optional Variant. Specifies the way links in the file >>> are updated. If this argument is omitted, the user is >>> prompted to specify how links will be updated. Otherwise, >>> this argument is one of the values listed in the following table. >>> >>> Value Meaning >>> 0 Doesn't update any references >>> 1 Updates external references but not remote references >>> 2 Updates remote references but not external references >>> 3 Updates both remote and external references >>> >>> >>> Hmm.. >>> >>> Is it possible for you to run the PHP script from the command >>> line on the server using the same credentials used by IIS (or >>> the app pool used). I'm still not 100% uptodate with IIS+PHP >>> security using FastCGI. If you can get the script running, >>> make sure you turn on visibility within/for Excel so you can >>> see what is happening. >>> >>> -- >>> ----- >>> Richard Quadling >>> Zend Certified Engineer : >>> http://zend.com/zce.php?c=ZEND002498&r=213474731 >>> "Standing on the shoulders of some very clever giants!" >>> >> > > I have a Type Library Viewer which allows me to see what the library > actually has to offer. Sometimes the docs are out of date. > > A typelib is essentially a self-documenting library. > > -- > ----- > Richard Quadling > Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 > "Standing on the shoulders of some very clever giants!" > -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!" -- PHP Windows Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php