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:
A me sembra che per fare alcuni calcoli sia stato complicato esageratamente il ragionamento.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; } } }
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!

Rispondi quotando