Application PHP et fichier Excel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Application PHP et fichier Excel

Application PHP et fichier Excel

par jullo » 23 nov. 2010, 16:18

Bonjour,

pour mon application en PHP je dois aller récupérer des informations dans un fichier Excel pour ensuite les insérer dans une base de données SQL.
Le fichier excel est en possession de l'utilisateur et est donc envoyé sur le serveur (par upload) pour pouvoir être traité.

J'ai le code suivant pour récupérer mes informations :

Code : Tout sélectionner

$data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('CP1251'); $data->read($monfichier); //$monfichier est le nom du fichier temporaire sur le serveur
Cependant le fichier Excel est protégé et je dois donc appelé une macro (dans le fichier excel) pour déverrouiller le contenu.
J'utilise donc un objet de type COM provenant de l'API Excel.

Code : Tout sélectionner

$excel_app = new COM("Excel.application") or Die ("[ERROR]"); $Workbook = $excel_app->Workbooks->Open($monfichier) or Die("[ERROR]"); try { $excel_app->Run('unlockAll'); } catch (Exception $e) { echo "[ERROR] " . $e->getMessage(); }
J'ai testé la macro directement sous Excel et elle fonctionne parfaitement, voici son code :

Code : Tout sélectionner

Sub unlockAll() ActiveWorkbook.Unprotect Password:="pass" ActiveWorkbook.Sheets("sheet1").Visible = xlSheetVisible ActiveWorkbook.Sheets("sheet2").Visible = xlSheetVisible ActiveWorkbook.Sheets("sheet3").Visible = xlSheetVisible End Sub Sub lockAll() ActiveWorkbook.Sheets("sheet1").Visible = xlSheetInvisible ActiveWorkbook.Sheets("sheet2").Visible = xlSheetInvisible ActiveWorkbook.Sheets("sheet3").Visible = xlSheetInvisible ActiveWorkbook.Protect Password:="pass" End Sub
Cependant lorsque j'exécute mon script, l'appel à la macro envoie l'exception suivante :
Source: Microsoft Excel
Description: Impossible d'exécuter la macro 'unlockAll'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.
Pourtant sur le serveur l'application Excel autorise l'exécution de toutes les macros. Je dois mal faire mon appel mais je dois avouer que je ne vois pas où.

J'ai également essayé d'ajouter la ligne suivante, avant l'appel à ma macro, dans mon code :

Code : Tout sélectionner

$Workbook->Unprotect("pass");
Mais le résultat est identique.

J'ai testé le même code avec un fichier Excel sans macro et là je n'ai aucun problème, j'arrive à extraire les informations que je souhaite.

Cela fait un moment que cela me bloque et c'est pourquoi j'aimerais avoir vos avis sur la question, je suis peut être passé à côté d'un truc.

Merci