Catcher les erreurs VBA en PHP

Catcher les erreurs VBA en PHP - PHP - Programmation

Marsh Posté le 10-11-2010 à 11:16:18    

Bonjour,
 
Je suis en train de développer un système de conversion en PDF de documents Word en PHP. Cela marche assez bien.
Cependant certains documents peuvent être buggés et plante l'instance de word en charge de la conversion sur le serveur (par exemple si un tableau dans le document est endommagé).
 
Directement en VBA j'arrive à éviter la majorité des plantages en mettant un bête et méchante "ON ERROR RESUME NEXT", c'est moche, c'est pas bien mais la gestion des erreurs en VBA étant ce qu'elle est j'ai pas trop le choix.
 
En général les plantages à cause d'un document défectueux se passe au moment de l'ouverture du fichier. Je voudrais donc en amont pouvoir forcer l'ouverture en attrapant l'erreur VBA coté PHP. Mais là je sèche un peu.
 
Voici le code en VBS qui fonctionne

Code :
  1. Dim WordApp,doc
  2. Set WordApp = CreateObject("Word.Application" )     '-- ouvre une session Word
  3. ON ERROR RESUME NEXT
  4. WordApp.Visible = True
  5. WordApp.Documents.Open("C:\Documents and Settings\Antoine\Bureau\LETTRE MOTI.doc" )
  6. Set doc = WordApp.ActiveDocument
  7. doc.ExportAsFixedFormat "C:\Documents and Settings\Antoine\Bureau\test.pdf",17
  8. WordApp.Quit


 
Voici le code PHP qui pose problème sur quelques rares documents car il n'y a pas de gestion d'erreur VBS (je précise qu'un try catch coté php ne permettra pas de convertir le fichier alors que souvent il s'agit d'un simple warning qui ne pose aucunement problème.
 

Code :
  1. $appliOLE = new COM("word.application" ) or die("WORD ne se connecte pas" );
  2.      $appliOLE->Visible = 0;
  3.     $appliOLE->Documents->Open( $fichierPathTmp ); //warning non catché à l'ouverture (et aucun retour en php)    
  4.     $appliOLE->Documents[1]->ExportAsFixedFormat( $fichierPathPDF , 17);  // Impossible de sauvegarder ou de faire quoi que ce soit sur le document si warning à l'ouverture
  5.     $appliOLE->Quit();


 
Avez vous une idée ?

Reply

Marsh Posté le 10-11-2010 à 11:16:18   

Reply

Marsh Posté le 10-11-2010 à 11:56:44    

Peut-être ceci :

Code :
  1. $err = $appliOLE->Documents->Open( $fichierPathTmp ) or echo("Warning pas grave" );


 
Edit :
Autre piste, il faudrait arriver à faire, avec OLE, la commande

DoCmd.SetWarnings False

Peut-être avec quelque chose comme:

$appliOLE->Documents->DoCmd.SetWarnings False


Message édité par olivthill le 10-11-2010 à 12:00:45
Reply

Marsh Posté le 10-11-2010 à 12:52:07    

DoCmd, je crois que ça fonctionne qu'avec Access

Code :
  1. $err = $appliOLE->Documents->Open( $fichierPathTmp ) or echo("Warning pas grave" );

ne change rien
 
J'ai trouvé une solution temporaire mais ça ne me plait pas...Je trouve que c'est un bricolage immonde. (Enfin, j'ai pour l'instant pas le choix)

Code :
  1. $oScript = new COM("MSScriptControl.ScriptControl" );
  2. $oScript->Language = "VBScript";
  3. $oScript->AllowUI = false;
  4. $oScript->AddCode('Sub Convert()
  5. Dim WordApp,doc
  6. Dim comp, components
  7. Set WordApp = CreateObject("Word.Application" )   
  8. ON ERROR RESUME NEXT
  9. WordApp.Visible = False
  10. WordApp.Documents.Open("'.$fichierPathTmp.'" )
  11. WordApp.Dialogs.Application.Visible = False
  12. Set doc = WordApp.ActiveDocument
  13. doc.ExportAsFixedFormat "'.$fichierPathPDF.'",17
  14. WordApp.Quit
  15. End Sub ');
  16. $oScript->Run("Convert" );


Message édité par antac le 10-11-2010 à 12:59:21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed