[PHP] Problème pour utiliser Word via COM

Bonjour bonjour

Je code actuellement une appli en PHP pour le taf, appli qui aura besoin de générer des documents Word (contrats, factures, etc). J’essaie donc d’utiliser COM. Sauf que pas de bol, ça ne marche pas (sinon je posterais pas un message ici).
Voilà l’erreur:

Warning: (null)(): Unable to obtain IDispatch interface for CLSID
{000209FF-0000-0000-C000-000000000046}: ClassFactory ne peut pas fournir la
classe demandée in d:program fileseasyphp1-7wwwgenerateword.php on line
2
Cannot start MS Word

Et voilà mon bout de PHP:

<? $word=new COM("Word.Application") or die("Cannot start MS Word"); print "Loaded word version ($word->Version) "; $word->visible = 1 ; $word->Documents->Add(); $word->Selection->Typetext("This is a test"); ?>[/quote]Alors, le CLSID en question existe bien dans la base de registres dans HKEY_CLASSES_ROOT, les services COM+ et RPC sont lancés, et le tout est sous WinXP avec Office 2003 (mais faut que ça marche aussi avec Office XP, donc je pense pas que ça passe avec du XML). A vot' bon coeur les codeurs, genre GloP le dieu de la prog MS ;)

Bon, je vais pas t’aider en repondant comme ca, mais j’avoue que j’ai du mal a comprendre pourquoi les gens utilisent PHP alors que C# et aspx est integre a 2k3, ce qui t’eviterais ces problemes.

Et en reflechissant a ton probleme, je me dirais que dans un cas comme le tien, si les forums PHP n’ont rien donne, je ferais une DLL (en VB ou C++) pour faire le maximum de taf dans un environnement MS, et laisser a PHP le minimum.

Maintenant, je sais pas exactement ce que tu veux faire…

LoneWolf

Enfin PHP sous windows, je crois que je comprendrais jamais.

[quote]Bon, je vais pas t’aider en repondant comme ca, mais j’avoue que j’ai du mal a comprendre pourquoi les gens utilisent PHP alors que C# et aspx est integre a 2k3, ce qui t’eviterais ces problemes.

Et en reflechissant a ton probleme, je me dirais que dans un cas comme le tien, si les forums PHP n’ont rien donne, je ferais une DLL (en VB ou C++) pour faire le maximum de taf dans un environnement MS, et laisser a PHP le minimum.

Maintenant, je sais pas exactement ce que tu veux faire…

LoneWolf
Enfin PHP sous windows, je crois que je comprendrais jamais.[/quote]Tout bêtement parce qu’au taf on n’a ni Win2003, ni VS.Net
Je souhaite en fait qu’un formulaire html remplisse des champs dans un document word (ou rtf pourquoi pas) prêt à imprimer

Bon, déja, précise quel est le serveur host. Apache ? IIS ?

Je ne vais pas t’aider non plus : Google est ton ami ! Non je plaisante.

Ouaih donc je ne vais pas t’aider mais peut-être y-a-t-il une autre solution pour résoudre ton problème :

Tu génères un XML avec PHP. Ce fichier XML tu le transformes en RTF via XSLT.
Et hop comme dirait ce cher Talon.

Tzim: apache sous win
EzecKiel: hmm pas bête. Et sinon j’avais déjà pas mal épluché Google. Merci pour l’idée du XML. J’ai essayé via directement du RTF mais ça foirait hélas

[quote]Et sinon j’avais déjà pas mal épluché Google.[/quote]Non c’était vraiment à prendre au second degré !
Moi je déteste qu’on me dise des trucs de ce genre, çà sert à rien, çà ne fait pas avancer le problème…

Bon j’ai fini par trouver sur le site de MS que la typelib nécessaire pour intéragir avec Word 2003 est MSWord.olb, mais hélas c’est déjà celle que j’ai chargée pour COM via php.ini
J’avoue ne plus trop savoir quoi faire…
GloP au secouuuuuuurs :wink:

Bon, juste comme ca, est-ce que l’User qui fait tourner le serv apache a bien les droits de lancer word ?

Et si tu vires “$word->Version” de la ligne 2, ça merdouille encore?

EDIT : suite à ta réponse : ben oui, mince je suis con… c’est à force de commencer à compter à partir de zéro ça
Ce message a été édité par Shinigami le 14/11/2003

oui, car l’erreur est au niveau du new COM(“Word.Application”)

bon en fait faudrait avoir la possibilité de faire de l’early binding avec php (il fait normalement du late binding), car dans la typelib de word, il n’y a pas d’interface par défaut, donc je dois utiliser _Application.
Le pb est que si je fais un new COM(“Word._Application”), évidemment, ça foire