RE: Excel OLE Automation using COM: file access problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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!"
> 

-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux