Ciao,
sto modificando uno script che genera un file Excel.
Adesso però mi sono incagliato in un pezzo di codice che non riesco a capire cosa faccia e che logica segua.
Questo codice dovrebbe calcolare la cella da cui iniziare (cinit) e quella dove finire (cend) per calcolare una somma.
Teoricamente per calcolare str_lettere_ore3 basterebbe fare str_lettere_ore2 + sizeof(arr_ute_con_ore).
Solo che vengono fatti dei calcoli strani usando quozienti e logaritmi, e non capisco perchè.
Il codice è questo:
codice:
//colonna iniziale
$cinit=5+sizeof($arr_ute_con_ore);
$n=ln($cinit);
$tolgo=parteSX($n);
$num_da_div=$cinit-$tolgo;
$arrQ=quozienti($num_da_div-1);
$str_lettere_ore2=strLetter($arrQ, $arrayLetter);
$cend=4+(sizeof($arr_ute_con_ore)*2);
$n=ln($cend);
$tolgo=parteSX($n);
$num_da_div=$cend-$tolgo;
$arrQ=quozienti($num_da_div-1);
$str_lettere_ore3 = strLetter($arrQ, $arrayLetter); // Estrapola la lettera corrispondente alla colonna indicata da arrQ
//ritorna il numero delle lettere della colonna excel
function ln($num){
$arraySize = sizeof($GLOBALS['arrayLetter']);
$n=((log(((arraySize-1)*$num)+arraySize))/log(arraySize));
return (int)$n;
}
//trovo la parte sinistra della classe di numeri
function parteSX($num){
$arraySize = sizeof($GLOBALS['arrayLetter']);
$n1=pow($arraySize, $num);
$n=(($n1-$arraySize)/(arraySize-1));
return $n;
}
//while per la divisione del numero per cui trovare le lettere, restituisce un array di quozienti
function quozienti($num){
$arraySize = sizeof($GLOBALS['arrayLetter']);
$i=0;
while($num>0){
$q=$num%$arraySize;
$quozienti[$i]=$q;
$num=$num/$arraySize;
$num=(int)$num;
$i++;
}
return $quozienti;
}
//dato un array di quozienti e un array di lettere restituisce una stringa di lettere corrispondente
function strLetter($arrQ, $arrL){
$str="";
while(true){
//igor: aggiunto controllo della validità dell'array
if(is_array($arrQ))
$elem=array_pop($arrQ);
else
$elem = NULL;
if($elem!=NULL){
$str=$str.$arrL[$elem];
}else{
return $str;
}
}
}
A me sembra che per fare alcuni calcoli sia stato complicato esageratamente il ragionamento.
Inizialmente invece del sizeof($arrayLetter) c'era messo a mano il numero 26 (il numero di lettere dell'alfabeto). Questo però crea problemi se si deve andare oltre la Z e passare alle celle AA, AB, AC, etc di Excel.
Ed è quello che devo correggere..... SE CAPISSI LA LOGICA DEL CODICE!!!
Mi dite la vostra impressione sui calcoli che vengono eseguiti e su cosa fanno?
PS - Se vi servono altri elementi non esitate a chiedere!