8 votes

phpExcel : getCalculatedValue() renvoie #VALEUR

Quelqu'un peut-il m'aider avec le code phpExcel :

Ce code :

$objPHPExcel->getActiveSheet()->getCell("AF19")->getCalculatedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getFormattedValue();
$objPHPExcel->getActiveSheet()->getCell("AF19")->getValue();

Les retours :

#VALUE!
#VALUE!
=AE19*I19

Merci d'avance ! :)

6voto

Mark Baker Points 90240

Pour aider à déboguer le problème, exécutez le calcul en mode DEBUG :

function testFormula($sheet,$cell) {
    $formulaValue = $sheet->getCell($cell)->getValue();
    echo 'Formula Value is' , $formulaValue , PHP_EOL;
    $expectedValue = $sheet->getCell($cell)->getOldCalculatedValue();
    echo 'Expected Value is '  , 
          ((!is_null($expectedValue)) ? 
              $expectedValue : 
              'UNKNOWN'
          ) , PHP_EOL;

    $calculate = false;
    try {
        $tokens = PHPExcel_Calculation::getInstance()->parseFormula($formulaValue,$sheet->getCell($cell));
        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
        $calculate = true;
    } catch (Exception $e) {
        echo 'PARSER ERROR: ' , $e->getMessage() , PHP_EOL;

        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
    }

    if ($calculate) {
        try {
            $cellValue = $sheet->getCell($cell)->getCalculatedValue();
            echo 'Calculated Value is ' , $cellValue , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        } catch (Exception $e) {
            echo 'CALCULATION ENGINE ERROR: ' , $e->getMessage() , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        }
    }
}

$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Calculation::getInstance()->writeDebugLog = true;

testFormula($sheet,'AF19');

Le résultat de cette opération devrait aider à diagnostiquer le problème.

4voto

pancy1 Points 23

Si vous n'êtes pas sûr du contenu d'une cellule (valeur ou formule incluse), je vous recommande de vérifier d'abord si la cellule a une formule et ensuite de copier - coller en conséquence. getOldCalculatedValue() est très utile dans ce cas. En voici un exemple :

$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
    $code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
             ->setCellValue('A'.$l, $code);

Pour les grands ensembles de données, la fonction getCalculatedValue() est vraiment encombrante et nécessite beaucoup de mémoire pour être exécutée correctement.

1voto

Aaron Brown Points 11

J'ai rencontré un problème similaire, getCalculatedValue() renvoie #VALUE ! sur une cellule qui fait référence à une autre cellule qui contient une formule.

La cause en était qu'une des cellules référencées contenait une valeur NULL, bien qu'Excel ait traité cela correctement. Il m'a suffi d'ajouter une valeur de 0 à cette cellule pour que le calcul se fasse correctement.

0voto

40Plot Points 893

Vous devriez essayer d'ouvrir le fichier Excel original et regarder la cellule AF19. Il est fort probable que MS Excel lui-même ait des difficultés à calculer la valeur parce qu'il y a un problème avec la formule située dans la cellule AF19.

Il se pourrait que

Cette formule essaie de multiplier deux cellules qui ne contiennent pas de nombre.

\=AE19*I19

AE19 contient une virgule et n'est pas formaté comme un nombre, PHPExcel le voit comme une chaîne de caractères.

Dans ce cas, vous pouvez essayer de formater les données dans Excel en faisant un clic droit (dans Excel) et en spécifiant le format numérique.

0voto

//Vous pouvez définir comme suit

$objPHPExcel->getActiveSheet()->setCellValue('A20','=AE19 * I19');

//parce que php excel définit le code dans une chaîne de caractères, vous obtiendrez une erreur. car dans phpexcel vous devez utiliser la formule excel. vous ne pouvez pas faire comme ceci A1+A2 ou autres.

Vous pouvez multiplier en php comme ceci

$bil1 = $objPHPExcel->getActiveSheet()->getCell("AE19")->getValue()

$bl2 = $objPHPExcel->getActiveSheet()->getCell("I19")->getValue()

//la fonction multiplie.

$total=$bil1*$bil2;

Après cela, vous pouvez définir le total dans votre cellule.

$objPHPExcel->getActiveSheet()->setCellValue('A20',$total);

Cela fonctionne dans mon php.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X