Допустим, нам надо представить ячейку с координатами (5,4) в Excel-формате, т.е. как “E4”. Либо (27,3) как “AA3”. Эту задачу легко выполнить, если представить буквенный формат таблицы Excel в виде 26ричной системы счисления, состоящей из букв.
Т.е., нам потребуется словарь, мы можем представить его одной алфавитной строкой, и собственно, сам алгоритм, который несложен сам по себе.
Для того, чтобы получать правильные координаты ячейки Excel, будем использовать начало координат не (0,0), а (1,1), как в экселе.
Получился такой вот код:
function getExcelCell($x,$y) {
if (($x < 1) || ($y < 1)) { return False; }
$alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$excelX = '';
while ($x > 0) {
$r = $x % 26;
$x = (int)($x / 26);
if ($r == 0) {
$r = 26; $x = $x - 1;
}
$excelX = $alphabet[$r-1] . $excelX;
}
$excelCell = $excelX . $y;
return $excelCell;
}
// Тест
for ($i = -10; $i < 1500; $i++) {
$res = getExcelCell($i,$i);
if ($res) {
echo $res . "<br>";
} else {
echo 'Значение (' . $i . ', ' . $i . ') не может быть обработано!<br>';
}
}
Как видите, в случае, если передаются отрицательные значения (или 0) в $x или $y, то функция возвращает False.