Google スプレッドシートにおける「数値列番号→アルファベット列番号」変換についてのメモ書き。
数値表記の列番号をアルファベットによる列番号に変換する方法として、 Excel と同じくセルの座標から行番号を取り除く方法がある ( list1.gas ) 。
しかしこの方法は API を使用するため、大量に変換を行う場合にボトルネックになってしまう。
list1.gas
function convertAlphabetColumnToNumeric(num) {
var sheet = SpreadsheetApp.getActiveSheet();
var result = sheet.getRange(1, num).getA1Notation().replace(/\d/,'');
return result;
}
したがって、 API を使用せずにこれらの変換処理を行えることが望ましい。
『数値と、Excel の列番号風のアルファベット表記の相互変換 in JavaScript - penultの日記』に API を経由せずに直接変換するコードがあったため、ここにメモしておく ( list2.gas ) 。
list2.gas
var ExcelUtils = (function() {
const RADIX = 26; //アルファベットの文字数
const A = 'A'.charCodeAt(0);
return {
/**
* アルファベット表記の列番号を、始まりを1とした数字にる列番号に変換する。
* @param {string} str
* @return {number}
*/
convertAlphabetColumnToNumeric: function(str) {
var s = str.toUpperCase();
var n = 0;
for (var i = 0, len = s.length; i < len; i++) {
n = (n * RADIX) + (s.charCodeAt(i) - A + 1);
}
return n;
},
/**
* 始まりを1とした数字にる列番号を、アルファベット表記の列番号に変換する。
* @param {number} num
* @return {string}
*/
convertNumericColumnToAlphabet: function(num) {
var n = num;
var s = "";
while (n >= 1) {
n--;
s = String.fromCharCode(A + (n % RADIX)) + s;
n = Math.floor(n / RADIX);
}
return s;
}
};
})();
以下のようにして使う。
testcode.gas
function test() {
Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("A")); // => 1
Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("Z")); // => 26
Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("AA")); // => 27
Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("ZZ")); // => 702
Logger.log(ExcelUtils.convertAlphabetColumnToNumeric("AAA")); // => 703
Logger.log(ExcelUtils.convertNumericColumnToAlphabet(1)); // => "A"
Logger.log(ExcelUtils.convertNumericColumnToAlphabet(26)); // => "Z"
Logger.log(ExcelUtils.convertNumericColumnToAlphabet(27)); // => "AA"
Logger.log(ExcelUtils.convertNumericColumnToAlphabet(702)); // => "ZZ"
Logger.log(ExcelUtils.convertNumericColumnToAlphabet(703)); // => "AAA"
}