Re: Excel OLE Automation using COM: file access problem

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

 



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



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

  Powered by Linux