Re: Excel OLE Automation using COM: file access problem

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

 



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



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

  Powered by Linux