Aller au contenu | Aller au menu | Aller à la recherche


PHP COM Excel Word

COM et .Net (Windows)

Rajout dans PHP php.ini pour les versions récentes :

Installation " Depuis PHP 5.3.15 / 5.4.5, cette extension requiert que la bibliothèque php_com_dotnet.dll soit activée dans votre php.ini pour pouvoir utiliser ces fonctions COM. "

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

Sinon, vous aurez l'erreur fatal :

Fatal error: Class 'COM' not found

Ressources

Lire un document word en PHP avec COM

Exemple de conversion d'un document Word en HTML via PHP. Ça fonctionne à la fois avec l'ancien format : .doc, et le nouveau : .docx (OpenDocument). Et ça marche avec les autres logiciels de la suite office : Excel et PowerPoint.

// Lancement de word
$word = new COM("word.application") or die("Impossible de démarrer le composant word");
 
// On masque word (pour ne pas afficher la fenêtre, et l'exécuter en arrière-plan)
$word->Visible = 0;
 
// Ouverture du fichier word (doc ou docx)
$word->Documents->Open(dirname(__FILE__).'/test.doc');
 
// Convertir le fichier word en HTML
$word->Documents[1]->SaveAs(dirname(__FILE__)."/test_doc.html",8);
 
// Fermeture de word
$word->Quit();
 
// Libération mémoire
$word->Release();
$word = null;

Problèmes

Problème d'ouverture/sauvegarde de fichier avec PHP COM

Workbooks->Open fonctionne en ligne de commande (PHP CLI), mais pas avec Apache (PHP SAPI avec XAMPP)

A l'exécution, PHP Apache retourne que le fichier n'est pas existant, lisible ou alors déjà utilisé.

Exception ! Source: Microsoft Excel Description: Microsoft Excel ne peut accéder au fichier "C:\monfichier.xls". Plusieurs raisons sont possibles :

  • Le nom du fichier ou le chemin d'accès n'existe pas.
  • Ce fichier est actuellement utilisé par un autre programme.
  • Le classeur que vous essayez d'enregistrer porte le même nom qu'un classeur actuellement ouvert.

Cela est dû à problème de droits qu'il faut contourner comme l'indique tsintra

  1. Exécuter "dcomcnfg" (Services de composants)
  2. Ouvrir Services de composants > Ordinateurs > Poste de travail > Configuration DCOM
  3. Chercher "Microsoft Excel Application"
  4. Bouton droits : Propriétés
  5. Onglet "Identité", par défaut il s'agit de "L'utilisateur exécutant". Changez le en "L'utilisateur interactif"
  6. Appliquer ces modifications, re-tester votre application COM. Cela doit fonctionner maintenant !

Identité

Cet onglet est utilisé pour déterminer le compte que vous souhaitez utiliser pour exécuter l'application.

  1. L'utilisateur interactif : l'application s'exécutera en utilisant le contexte de sécurité de l'utilisateur actuellement connecté à l'ordinateur.
  2. L'utilisateur exécutant : l'application s'exécutera en utilisant le contexte de sécurité de l'utilisateur qui a démarré l'application.
  3. Cet utilisateur : vous pouvez spécifier l'utilisateur dont le contexte sécurité est utilisé pour exécuter l'application.
  4. Le compte système : cela est disponible uniquement pour les services Windows NT et Windows 2000 qui utilisent DCOM.

A l'inverse avec le "L'utilisateur interactif", si la session est fermée, l'objet COM n'est pas instanciable, il faut donc le passer en "L'utilisateur exécutant"

excel automation without session

Excel 2007 automation on top of a Windows Server 2008 x64 et Excel 2007 automation on top of a Windows Server 2008 x64

Après tout, j'ai trouvé une autre solution qui ne change pas de valeurs de registre et tout fonctionne normalement. La solution est ...

  • Windows 2008 Server x64
 créer un dossier :
 C:\Windows\SysWOW64\config\systemprofile\Desktop
  • Windows 2008 Server x86
 créer un dossier :
 C:\Windows\System32\config\systemprofile\Desktop

... à la place de dcomcnfg.exe. Cette opération a supprimé mes problèmes d'automatisation de bureau dans mon système. Un dossier de bureau semble être nécessaire dans le dossier de systemprofile afin d'ouvrir le fichier par Excel. Il disparaît de Windows 2008, Windows 2003 avait le dossier, et je pense que c'est ce ui provoque cette erreur. Je pense qu'il est plus sûr qu'un "piratage de registre".

Excel COM automation stops working when user logs off

  1. créer le dossier : C:\Windows\System32[ou SysWOW64]\config\systemprofile\Desktop
  2. assurez-vous q'une imprimante par défaut est configuré pour le service de l'utilisateur
  3. changer les paramètres DCOMCNFG (mmc -32, add "component services") d'Excel pour exécuter à l'aide du compte interactif
  4. changer les paramètres par défaut de DCOM pour autoriser l'accès, le lancement et l'activation local pour l'utilisateur du service

NFS et Windows

Visiblement pour monter un partage NFS depuis Windows, la version pro n'est pas suffisante, il vous faudra la version entreprise ou ultimate/intégrale.

Création d'un lien répertoire symbolique

D:\DATA\
        data_files => F:\data_files\
                          
MKLINK /D D:\DATA\data_files F:\data_files
Lien symbolique créé pour D:\DATA\data_files <<===>> F:\data_files

Commentaires

1. Le mercredi, février 25 2015, 17:22 par forest

Je sais que l'article est pour PHP, mais le problème se pose [bien sûr] avec tous les appels DCOM d'excel :
Merci, le mode utilisateur de service a débloqué ma situation (programme VBS lancés via un service Windows, service lui-même démarré avec un compte de domaine). En remettant le même compte dans dcomcnfg, et session fermée, ça a marché !

MERCI !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet