2017-09-20 1 views
0

Je fais un programme et j'utilise PHPExcel. Dans le programme, vous pouvez sélectionner la largeur et la hauteur. (la largeur est la ligne verte et le bleu est la hauteur)PHPExcel obtient la cellule de x et y

Tous les chiffres en blanc sont des prix. Disons que j'insère 1400 largeur et 1600 hauteur. le prix devrait être 640. Comment puis-je y parvenir?

enter image description here

Répondre

0

L'option la plus facile est de trouver quelle colonne contient 1400 en ligne 1 (D dans votre exemple), et quelle ligne contient 1600 dans la colonne A (5 dans votre exemple), puis l'utiliser pour lire la valeur à cette cellule (D5)

une manière un peu plus habile consiste à utiliser une formule Excel:

=INDIRECT(CONCATENATE(SUBSTITUTE(ADDRESS(1,MATCH(1400,A1:E1,0),4),1,""),MATCH(1600,A1:A17,0))) 

en remplaçant les valeurs de recherche appropriées pour 1400 et 1600 et en ajustant les plages MATCH à la taille maximale pour vos recherches de largeur et de hauteur .... Dans MS Excel lui-même, vous pouvez utiliser des plages de lignes et de colonnes (A:A) et (1:1) , mais le moteur de calcul PHPExcel ne traitera pas ramer plages disponibles correctement, mais il fonctionnera avec des plages de cellules


Comme une explication de la formule ci-dessus:

MATCH(1400,A1:E1,0) 

fait une recherche pour la valeur 1400 dans la plage de cellules A1: E1 (recherche d'une correspondance pour votre largeur). La valeur renvoyée pour MATCH() est un décalage numérique dans cette ligne pour la colonne où elle est trouvée. Dans ce cas, il renverra 4.

SUBSTITUTE(ADDRESS(1,<4>,4),1,"") 

Transforme le numéro de colonne à une lettre de la colonne ... convertit par exemple 4-D. si votre gamme n'a pas commencé à A, alors vous devez ajouter un décalage pour obtenir la lettre correcte

MATCH(1600,A1:A17,0) 

Similaire au match précédent, mais cette fois la recherche dans vos hauteurs gamme de colonnes (A1:A17) pour la valeur 1600. Il retournera le décalage dans cette plage où il trouve la valeur. Encore une fois, si votre plage ne commence pas dans la ligne 1, vous devez ajouter un décalage. Dans votre cas, il renverra 5.

CONCATENATE(<D>,<5>) 

Concatène la colonne calculée et valeurs pour la ligne ensemble pour donner une adresse de cellule (D5)

INDIRECT(<D5>) 

lit la valeur à l'adresse de la cellule que nous avons calculé (D5) donnant la valeur 640