Bonjour, les objets venant de COM manquent cruellement de doc sur le WEB et l'interprétation en PHP des objets venant de VB est souvent périlleuse.
Lorsque je lis une cellule d'un fichier EXCEL (2003 je crois), s'il y a une formule EXCEL dans cette cellule qui plante,
Excel traduit cette erreur par #VALUE! mais ce n'est pas une chaine :
$Valeur = $this->_Feuille->Range($Cellule)->Value;
un bon test règle le problème ...
if (is_object($Valeur)) {
Mais n'y a-t-il pas un moyen plus complet de piloter ces erreurs ?
J'ai trouvé des bouts de code (en .NET je crois)
mais à chaque fois, la routine fait référence à des constantes dont j'ignore comment les récupérer ....
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Worksheets("Sheet1").Activate If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! error" Case CVErr(xlErrNA) MsgBox "#N/A error" Case CVErr(xlErrName) MsgBox "#NAME? error" Case CVErr(xlErrNull) MsgBox "#NULL! error" Case CVErr(xlErrNum) MsgBox "#NUM! error" Case CVErr(xlErrRef) MsgBox "#REF! error" Case CVErr(xlErrValue) MsgBox "#VALUE! error" Case Else MsgBox "This should never happen!!" End Select End If
ou encore ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Public Function TypeCell(MyCell As Range) As String If IsEmpty(MyCell) Then TypeCell = "Vide" ElseIf Application.IsText(MyCell) Then TypeCell = "Texte" ElseIf Application.IsLogical(MyCell) Then TypeCell = "Logique" ElseIf Application.IsErr(MyCell) Then TypeCell = "Erreur" ElseIf IsDate(MyCell) Then TypeCell = "Date" ElseIf IsNumeric(MyCell) Then TypeCell = "Nombre" End If End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 private static Object ContenuCellule(HSSFCell cell){ Object value = null ; if(cell == null){ value = ""; } else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){ value = cell.getBooleanCellValue(); } else if(cell.getCellType() == HSSFCell.CELL_TYPE_ERROR){ value = cell.getErrorCellValue(); } else if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){ value = cell.getCellFormula(); } else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ value = cell.getNumericCellValue(); } else if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){ value = cell.getStringCellValue(); } return value;
Partager