Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как узнать, какой буквой будет называться 26 столбик в Excel (https://javascript.ru/forum/events/84184-kak-uznat-kakojj-bukvojj-budet-nazyvatsya-26-stolbik-v-excel.html)

sovsem-nub 29.06.2022 16:16

Как узнать, какой буквой будет называться 26 столбик в Excel
 
Как все мы знаем "буквенная нумерация" столбиков в Excel имеет интересный вид первые 25 столбиков называются латинскими большими буквами A...Z потом буквы закачиваются и 26 столбик называется AA, 27 AB итд такая вот 25-тиичная система исчисления из букв латинского алфавита.
Мне нужно написать функцию, которая по номеру столбика возвращала его буквенное наименование с первыми 25 легко

function f(i) {
  i=i+65;
   alert(String.fromCharCode(i));
}
f(25)



а как дальше? как мне получить название 26 столбика "AA" итд

то есть нужно десятичную систему исчисления перевести в 25-тиичную из букв

MallSerg 29.06.2022 16:50

Деление по модулю на базу.

рони 29.06.2022 18:49

MallSerg,
а можно код ... пробовал, не осилил)))


если долго мучатся ... )))
function excelTitle(index) {
            let title = '', up = "A".charCodeAt(0);
            while (index >= 0) {
                title = String.fromCharCode(index % 26 + up) + title;
                index = index / 26 | 0;
                index -= 1;
            }
            return title
        }
        //как мне получить название 26 столбика "AA" итд
        let index = 26;
        alert(excelTitle(index));

рони 29.06.2022 23:21

Цитата:

Сообщение от sovsem-nub
26 столбик называется AA,

так то это 27 столбик с индексом 26!!! (на всякий случай)

sovsem-nub 30.06.2022 11:03

Цитата:

Сообщение от рони (Сообщение 546375)
так то это 27 столбик с индексом 26!!! (на всякий случай)

Да, все правильно, спасибо. столбик А это 0, а столбик АА это 26.

не знал про это
%
(Modulus)

Бинарная операция. Возвращает целочисленный остаток от деления двух операндов.

12 % 5 возвращает 2.




И еще не понял зачем | 0; в пятой строке. Это означает "или ноль?" в каком случае это сработает?

А, это округлить до целых.... как удобно то...

sovsem-nub 30.06.2022 14:39

Больше похвалиться некому. Написал функцию наоборот. По названию столбца Excel его порядковый номер

function excelInd(Ind) {
      let title = Ind.split('').reverse();
      let i = 0;
      let rez=0;
      let alrez=0;
            while (i < title.length) {
rez=(title[i].codePointAt(0)-64)*26**i;
if(i==0){rez=rez-1};
alrez=alrez+rez;
               i++;
            } 
          
            return alrez
        };

alert(excelInd("AA")  );


пока писал забыл, зачем я это делал...

рони 30.06.2022 15:20

sovsem-nub,
:)
function excelInd(title)
{  title = title.toUpperCase();
   let up = "A".charCodeAt(0) - 1, index = 0;
   for(letter of title) { 
      index *= 26;
      index += letter.charCodeAt(0) - up
   }
   return --index
}
alert(excelInd('aa'))

MallSerg 01.07.2022 00:44

Похоже разобрались =).


Часовой пояс GMT +3, время: 11:51.