> PHP | Sistemas | Tecnologia | Web > Função para converter fórmulas condicionais do Excel para PHP

Função para converter fórmulas condicionais do Excel para PHP

Posted on janeiro 3, 2011 | Comentários desativados em Função para converter fórmulas condicionais do Excel para PHP

A algum tempo atrás precisei de uma função que convertesse pra mim estruturas condicionais do Excel [SE()], em estruturas condicionais da linguagem PHP. Após perder muito tempo a procura e não encontrar nada, resolvi criar uma função para estruturas simples.

Exemplo:

$x = 15;
$result = excelToPhp(“SE($x<=4;0;SE($x=15;111;666))”);
echo $result;
[Resultado: 15<=4?0:(15==15?111:666) ]

Com isso basta utilizar o eval e receber o valor da condição:

echo eval(“$test = $result;”);
echo $test;
[Resultado: 111]

Simples não!

Agora veja a função aqui:

function excelToPhp($for){

$operadores = "-*/=><";
$for = str_replace("SE","IF",$for);
$str = $for;
$pos = strpos($for,"E(");
while($pos!=''){
     $exp = substr($str,$pos+1);
     $pos1 = strpos($exp,"(");
     $pos2 = strpos($exp,")");
     $str1 = substr($exp,$pos1+1,$pos2-1);
     $str = str_replace(";","#",$str1);
     $for = str_replace($str1,$str,$for);
     $pos = strpos($str,"E");
}

$str = $for;
$pos = strpos($for,"OU(");
while($pos!=''){
     $exp = substr($str,$pos+1);
     $pos1 = strpos($exp,"(");
     $pos2 = strpos($exp,")");
     $str1 = substr($exp,$pos1+1,$pos2-1);
     $str = str_replace(";","@",$str1);
     $for = str_replace($str1,$str,$for);
     $pos = strpos($str,"OU");
}

$i = 0;
$str = explode(";",$for);
while($i<count($str)){
     $str[$i] .= ";";
     $j=0;
     while($j<strlen($operadores)){
          $op = $operadores{$j};
          if(strpos($str[$i],$op)!=''){
               $str[$i] = $str[$i]."?";
          }
          $j++;
     }
     $str[$i] = str_replace("IF","",$str[$i]);
     $forr .= $str[$i];
     $i++;
}

$forr = substr($forr,1);
$forr = str_replace(";?","?",$forr);
$forr = str_replace("|??","AA",$forr);
$forr = str_replace("AA","?",$forr);
$forr = str_replace("??","?",$forr);
$forr = str_replace("@"," || ",$forr);
$forr = str_replace("E","",$forr);
$forr = str_replace("OU","",$forr);
$forr = str_replace(";",":",$forr);
$forr = str_replace(":)",")",$forr);
$forr = str_replace("||):",")?",$forr);
$forr = substr($forr,0,strlen($forr)-2);
$forr = str_replace("=","==",$forr);
$forr = str_replace("<==","<=",$forr);
$forr = str_replace("|):",")?",$forr);
$forr = str_replace("?(",":(",$forr);
$forr = str_replace("#"," && ",$forr);
$forr = str_replace("?0)"," : 0)",$forr);
return $forr;
}

Ainda tem muita coisa pra fazer nessa função e deixar ela mais limpa, mas ja quebra um grande galho.

inté mais!

Comments are closed .