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
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();
}
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
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ù.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.
J'ai également essayé d'ajouter la ligne suivante, avant l'appel à ma macro, dans mon code :
Code : Tout sélectionner
$Workbook->Unprotect("pass");
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