[javascript] 열 인덱스를 해당 열 문자로 변환

Google 스프레드 시트 열 색인을 해당하는 문자 값으로 변환해야합니다 (예 : 스프레드 시트가 주어짐).

여기에 이미지 설명 입력

이 작업을 수행해야합니다 (이 함수는 분명히 존재하지 않습니다. 예입니다).

getColumnLetterByIndex(4);  // this should return "D"
getColumnLetterByIndex(1);  // this should return "A"
getColumnLetterByIndex(6);  // this should return "F"

이제 인덱스가에서 시작하는지 0또는 시작하는지 정확히 기억하지 못합니다 1. 어쨌든 개념은 명확해야합니다.

나는 가스 문서에서 이것에 대해 아무것도 찾지 못했습니다 .. 나는 장님입니까? 어떤 생각?

감사합니다



답변

나는 이것을 다양한 목적으로 잠시 썼다 (열 번호> 26에 대해 두 글자 열 이름을 반환 할 것이다) :

function columnToLetter(column)
{
  var temp, letter = '';
  while (column > 0)
  {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

function letterToColumn(letter)
{
  var column = 0, length = letter.length;
  for (var i = 0; i < length; i++)
  {
    column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
  }
  return column;
}


답변

이것은 잘 작동합니다

=REGEXEXTRACT(ADDRESS(ROW(); COLUMN()); "[A-Z]+")

Z를 초과하는 열에서도.

기능 데모

COLUMN()열 번호로 바꾸기 만하면 됩니다. 의 가치는 ROW()중요하지 않습니다.


답변

=SUBSTITUTE(ADDRESS(1,COLUMN(),4), "1", "")

이것은 당신의 셀을 취하고, 예를 들어 C1과 같은 주소를 얻고, “1”을 제거합니다.

여기에 이미지 설명 입력

작동 원리

  • COLUMN() 셀의 열 번호를 제공합니다.
  • ADDRESS(1, ..., <format>)<format>매개 변수가 지정한 형식으로 셀 주소를 제공합니다 . 4알고있는 주소를 의미합니다.C1 .
    • 여기서 행은 중요하지 않으므로 1 .
    • 문서 보기ADDRESS
  • 마지막으로 주소에서를 SUBSTITUTE(..., "1", "")대체 하므로 열 문자가 남습니다.1C1


답변

이것은 범위에서 작동합니다. A-Z

=char(64+column())


답변

여기서 바퀴를 재발 명 할 필요가 없습니다. 대신 GAS 범위를 사용하세요.

 var column_index = 1; // your column to resolve

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var range = sheet.getRange(1, column_index, 1, 1);

 Logger.log(range.getA1Notation().match(/([A-Z]+)/)[0]); // Logs "A"


답변

자바 스크립트에서 :

X = (n) => (a=Math.floor(n/26)) >= 0 ? X(a-1) + String.fromCharCode(65+(n%26)) : '';
console.assert (X(0) == 'A')
console.assert (X(25) == 'Z')
console.assert (X(26) == 'AA')
console.assert (X(51) == 'AZ')
console.assert (X(52) == 'BA')


답변

@SauloAlessandre의 답변에 추가하면 A-ZZ의 열에서 작동합니다.

=if(column() >26,char(64+(column()-1)/26),) & char(65 + mod(column()-1,26))

@wronex와 @Ondra Žižka의 답변이 마음에 듭니다. 그러나 @SauloAlessandre의 답변의 단순함이 정말 마음에 듭니다.

그래서 @SauloAlessandre의 답변이 더 넓은 스프레드 시트에서 작동하도록 허용하는 명확한 코드를 추가했습니다.

@Dave가 그의 의견에서 언급했듯이 프로그래밍 배경, 특히 알파벳의 n 번째 문자를 표준 패턴으로 얻기 위해 숫자에 ‘A’의 16 진수 값을 추가 한 C의 프로그래밍 배경이 있으면 도움이됩니다.

@Sangbok Lee가 지적한 오류를 포착하기 위해 답변이 업데이트되었습니다. 감사합니다!