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!" -- PHP Windows Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php