ioerror

엑셀의 셀좌표를 숫자 인덱싱 하기 본문

JavaScript

엑셀의 셀좌표를 숫자 인덱싱 하기...

반응형

상황

PhpSpreadsheet를 사용하여 데이터를 등록하는 프로그램을 할 때 셀의 가로 키값(칼럼)을 인덱 싱하여 선택적으로 등록하려다 보니 문자보다는 숫자 키값을 사용하는 것이 편해서 아래 방법을 찾아봤다. 그런데 나중에 PhpSpreadsheet API 문서를 보니 컬럼 키값을 문자열이 아닌 숫자 키를 가진 배열을 반환해주는 기능이 메서드가 있었다. RTFM이다.

이건 PHP 쪽에 가야 하는데, PhpSpreadsheet 다룰 때 하기로 하고 javascript에서 사용할 수도 있을 거 같아서 남겨놓는다.

 

엑셀 형식의 문자열을 키값을 숫자 키값으로 변환

/**
 * 요청된 엑셀 컬럼의 문자열 키값을 숫자로 반환
 * letter = A  이면 1 (startIndex = 1 기본값)
 * startIndex = 1 이면 letter = A = 1
 * startIndex = 0 이면 letter = A = 0
 */
function numberFromLetter(letter, stratIndex) {
  stratIndex = typeof (stratIndex) != 'undefined' ? stratIndex : 1;
  letter = letter.toUpperCase();
  let number = 0, len = letter.length;
  for (pos = 0; pos < len; pos++) {
    number += (letter.charCodeAt(pos) - 65 + stratIndex) * Math.pow(26, len - pos - 1);
  }
  return number;
}

console.log(numberFromLetter('A',1)); // 1 = A

 

숫자 키값을 엑셀 칼럼 키값 형식으로 변환

/**
 * 요청된 숫자(number)에 해당하는 엑셀 컬럼 문자열 키값
 * number = 1 이면 A (startIndex = 1 기본값)
 * startIndex = 1 이면 number = 1 = A
 * startIndex = 0 이면 number = 1 = B
 * */
function letterFromNumber(number, stratIndex) {
  stratIndex = typeof (stratIndex) != 'undefined' ? stratIndex : 1;
  let key = number % 26;
  let letter = String.fromCharCode(65 + key - stratIndex);
  number2 = parseInt(number / 26);
  if (number2 > 0) {
    return letterFromNumber(number2 - 1) + letter;
  }
  return letter;
}

console.log(letterFromNumber(1)); // 1 = A
반응형
Comments