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!