php-windows Digest 28 May 2009 18:12:48 -0000 Issue 3632

Topics (messages 29358 through 29362):

Re: Excel OLE Automation : accessing the Excel constants
        29358 by: Geoff Lane
        29360 by: Richard Quadling

Re: Excel OLE Automation using COM: file access problem
        29359 by: Richard Quadling
        29361 by: Richard Quadling

getting started - need pointers
        29362 by: Mike Kay

Administrivia:

To subscribe to the digest, e-mail:
        php-windows-digest-subscr...@lists.php.net

To unsubscribe from the digest, e-mail:
        php-windows-digest-unsubscr...@lists.php.net

To post to the list, e-mail:
        php-wind...@lists.php.net


----------------------------------------------------------------------
--- Begin Message ---
On Wednesday, May 27, 2009, 5:55:51 AM, Samuel wrote:

> ExcelSheet.Range("C65536").End(xlUp)

> This fails because the constant xlUp is undefined...

> There is some user contributed notes about that problem in the
> documentation (http://jp2.php.net/manual/en/book.com.php) but it doesn't
> say if it's possible to really access the Excel constants.
---

You need to define the constants for yourself. Since I don't use PHP
with Excel I haven't done this and so cannot give you a ready-made
file to require(). However, Microsoft give a full list of the
constants at http://msdn.microsoft.com/en-us/library/aa221100.aspx -
so you can look up the ones you need and add them to your own library
as you go along.

HTH,

-- 
Geoff


--- End Message ---
--- Begin Message ---
2009/5/27 Geoff Lane <ge...@gjctech.co.uk>:
> On Wednesday, May 27, 2009, 5:55:51 AM, Samuel wrote:
>
>> ExcelSheet.Range("C65536").End(xlUp)
>
>> This fails because the constant xlUp is undefined...
>
>> There is some user contributed notes about that problem in the
>> documentation (http://jp2.php.net/manual/en/book.com.php) but it doesn't
>> say if it's possible to really access the Excel constants.
> ---
>
> You need to define the constants for yourself. Since I don't use PHP
> with Excel I haven't done this and so cannot give you a ready-made
> file to require(). However, Microsoft give a full list of the
> constants at http://msdn.microsoft.com/en-us/library/aa221100.aspx -
> so you can look up the ones you need and add them to your own library
> as you go along.
>
> HTH,
>
> --
> Geoff
>
>
> --
> PHP Windows Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

This is 3 lines from my PHP script dealing with talking to Crystal Reports.

<?php
// Create an Crystal Object Factory.
$o_CrObjectFactory = New COM('CrystalReports11.ObjectFactory.1');

// Create the Crystal Reports Runtime Application.
$o_CrApplication =
$o_CrObjectFactory->CreateObject("CrystalRunTime.Application.11");

// Register the typelibrary.
com_load_typelib('CrystalDesignRunTime.Application');

// Show the value for the PDF Export file type.
echo crEFTPortableDocFormat; // Outputs 31




So, whatever library you load, you have to use com_load_typelib()
(http://docs.php.net/com_load_typelib) on it.

I believe that this is supposed to happen automatically if
com.autoregister_typelib is set, but as the documentation mentions,
the auto-registration is library dependent.

Regards,

Richard.

-- 
-----
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"

--- End Message ---
--- Begin Message ---
2009/5/25 Faubry, Samuel <samuel.fau...@parexel.com>:
> 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:rquadl...@googlemail.com]
>> Sent: Tuesday, May 19, 2009 5:28 PM
>> To: Faubry, Samuel
>> Cc: php-wind...@lists.php.net
>> Subject: Re: [PHP-WIN] Excel OLE Automation using COM: file
>> access problem
>>
>> 2009/5/19 Faubry, Samuel <samuel.fau...@parexel.com>:
>> >> From: Richard Quadling
>> >> 2009/5/18 Faubry, Samuel <samuel.fau...@parexel.com>:
>> >> > 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!"

--- End Message ---
--- Begin Message ---
http://www.jose.it-berater.org/

2009/5/27 Richard Quadling <rquadl...@googlemail.com>:
> 2009/5/25 Faubry, Samuel <samuel.fau...@parexel.com>:
>> 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:rquadl...@googlemail.com]
>>> Sent: Tuesday, May 19, 2009 5:28 PM
>>> To: Faubry, Samuel
>>> Cc: php-wind...@lists.php.net
>>> Subject: Re: [PHP-WIN] Excel OLE Automation using COM: file
>>> access problem
>>>
>>> 2009/5/19 Faubry, Samuel <samuel.fau...@parexel.com>:
>>> >> From: Richard Quadling
>>> >> 2009/5/18 Faubry, Samuel <samuel.fau...@parexel.com>:
>>> >> > 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!"

--- End Message ---
--- Begin Message ---
Greetings. I am trying to get PHP installed and working on a Windows
server - Windows Standard 2007. I've downloaded and installed PHP 5.2.9.
Problem is I don't know how to use this at all. My web server is Apache
2.2 - my database is Mysql.

I selected the Apache module 2.2 during the install, and added support for
Mysql in extensions.

How can make windows start PHP on boot?
When I click on a .php file, the file opens rather than runs. Obviously
I've missed something. There is a command phpinfo - to view the parameters
of the PHP installed - I don't remember how to run this on the command
line.

Any help MOST appreciated.
Also, I'm seeking pointers to beginners documentation for Windows users.

Thanks a lot.



--- End Message ---

Reply via email to