Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2022, 16:16
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Как узнать, какой буквой будет называться 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-тиичную из букв
Ответить с цитированием
  #2 (permalink)  
Старый 29.06.2022, 16:50
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

Деление по модулю на базу.
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2022, 18:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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:10.
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2022, 23:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от sovsem-nub
26 столбик называется AA,
так то это 27 столбик с индексом 26!!! (на всякий случай)
Ответить с цитированием
  #5 (permalink)  
Старый 30.06.2022, 11:03
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от рони Посмотреть сообщение
так то это 27 столбик с индексом 26!!! (на всякий случай)
Да, все правильно, спасибо. столбик А это 0, а столбик АА это 26.

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

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

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




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

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

Последний раз редактировалось sovsem-nub, 30.06.2022 в 11:13.
Ответить с цитированием
  #6 (permalink)  
Старый 30.06.2022, 14:39
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Больше похвалиться некому. Написал функцию наоборот. По названию столбца 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")  );


пока писал забыл, зачем я это делал...
Ответить с цитированием
  #7 (permalink)  
Старый 30.06.2022, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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'))
Ответить с цитированием
  #8 (permalink)  
Старый 01.07.2022, 00:44
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

Похоже разобрались =).
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как здесь getDay( ) будет определять какой день недел Kasumbekov Askar AJAX и COMET 3 24.11.2015 00:01
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
как узнать размер в пикселях элемента созданного элемента span Faab Общие вопросы Javascript 2 09.11.2013 16:46
Как узнать номер столбца по выделенной ячейке tzarek jQuery 1 28.08.2013 16:01
Как узнать какой скрипт вызывается при клике по эленету (если это прямо не прописано) Dmitriy Komar Events/DOM/Window 4 08.12.2011 17:21