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”을 제거합니다.
작동 원리
답변
이것은 범위에서 작동합니다. 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가 지적한 오류를 포착하기 위해 답변이 업데이트되었습니다. 감사합니다!