🏗️

数値から Google Spreadsheet の列名に変換する関数(TypeScript)

2024/11/26に公開

内容

Google Sheets API を叩く実装をするときに, API からは列の数が数値で飛んできます.
読み取り・書き込みのリクエストをするときには シート名!A1:AA10 のような形式で範囲指定をするため, AA 列以降の列を指定するには数値からこの文字列を作成する必要があります.
たとえば, 27AA に変換する必要があります.

これを今回は TypeScript で実装しました.

実装

// ASCII code value before 'A' ('A' is 65)
const ASCII_BEFORE_A = 64;
// Number of letters in alphabet
const ALPHABET_LENGTH = 26;

export const columnName = (num: number): string => {
  if (num < 1) {
    throw new Error("Column number must be greater than 0");
  }
  return _columnName(num);
};

const _columnName = (n: number): string => {
  if (n <= ALPHABET_LENGTH) {
    return String.fromCharCode(ASCII_BEFORE_A + n);
  }
  const quotient = Math.floor((n - 1) / ALPHABET_LENGTH);
  const remainder = n - quotient * ALPHABET_LENGTH;
  return (
    _columnName(quotient) + String.fromCharCode(ASCII_BEFORE_A + remainder)
  );
};

https://www.typescriptlang.org/play/?#code/PTAEEEGUGEEldAYwPYBMCmoBuBDANgK6YBG6AZsgE6YDk4NoAFAGwAsoAzgJYB2it9UFw6hmAVgCUAKBQ8OAFwgx4AfQBCAUQBiAeQBKGleFABeUawDcUkKAByBALalKoZGVB508+ekojeoPgADgAWOKTyMshyiuAAMgAKABLgmgAqKnEatgDiaUmmoABMzFZRMUjIhA48tjgOmGaMPI4AXKAtTr4S7QqUvADmpgB8oADeUqBC7s2OoAA8oACMEuOTU6DyIZTIAO4d6PsalDuUjABE0FWOPB2OzqAOBAqgpKAD1Dg+Lls4twAM5wkVimAF91tR5ARKLcVChqrV6uhZg5gVJQWVZC84dcanUGoVmu1Os4epx5P0eEMTKMJlMuDNbvMzPFkqkNBksrl8qs6RtIdDbpAKYMAHRkHYOaBhShXDCMKBwWDqbT6QzGADUHTRYPWWMUAEcCMh5Fx0DxFGYALJfELivDIKiMZqgAC0y1WYFZKXSmWyeSSOsqFWoDhwvAwLjMt3dRpNZotoAAVBBEj6OX7uUkQaABTCmOspjiEfjkXHTeb5KstcLKQNxZLpThZWhkYrVJpdAYjKAtaHwzxI9IpmiMVJyhwquhRQ6Box4TdS4wigB2CRooA

Discussion