给定第一个字母和一个数据数组,如何生成 google sheet 列的最后一个字母?

How to generate the last letter of a google sheet column given the first letter and an array of data?

现在我的方法是只生成一个字母,但是如果有很多数据并且它出现在列 Z 之后,我的代码就会中断。

工作代码将给出 a, d:

const countData = [1, 2, 3, 4].length;
const initialLetter = 'A'.toLowerCase();
const initialLetterNumber = initialLetter.charCodeAt(0) - 97;
const lastLetter = String.fromCharCode(
  initialLetterNumber + countData - 1 + 97
);

console.log(initialLetter, lastLetter);

非工作代码,在这种情况下我想得到 z, ac

const countData = [1, 2, 3, 4].length;
const initialLetter = 'Z'.toLowerCase();
const initialLetterNumber = initialLetter.charCodeAt(0) - 97;
const lastLetter = String.fromCharCode(
  initialLetterNumber + countData - 1 + 97
);

console.log(initialLetter, lastLetter);

一些输入和想要的结果:

input: a, data length: 1 output: a,
input: a, data length: 2 output: b,
input: a, data length: 3 output: c,
input: a, data length: 4 output: d,
input: a, data length: 5 output: e,

input: z, data length: 1 output: z,
input: z, data length: 2 output: aa,
input: z, data length: 3 output: ab,
input: z, data length: 4 output: ac,
input: z, data length: 5 output: ad,

input: ad, data length: 1 output: ad,
input: ad, data length: 2 output: ae,
input: ad, data length: 3 output: af,
input: ad, data length: 4 output: ag,
input: ad, data length: 5 output: ah,

input: az, data length: 1 output: az,
input: az, data length: 2 output: ba,
input: az, data length: 3 output: bb,
input: az, data length: 4 output: bc,
input: az, data length: 5 output: bd,

input: bz, data length: 1 output: bz,
input: bz, data length: 2 output: ca,
input: bz, data length: 3 output: cb,
input: bz, data length: 4 output: cc,
input: bz, data length: 5 output: cd,

...

您可以使用两个函数从字符串中获取整数值,并从整数值中获取字符串。

使用这个函数,你可以调整数值并得到这个值的编码字符串。

const
    decode = string => [...string].reduce((r, c) => r * 26 + parseInt(c, 36) - 9, 0) - 1,
    encode = integer => {
        let result = '';
        do {
            result = (integer % 26 + 10).toString(36) + result;
            integer = Math.floor(integer / 26) - 1;
        } while (integer >= 0)
        return result;
    };

for (let i = 0; i < 26 * 27 + 1; i++) {
    const s = encode(i);
    document.getElementById('out').innerHTML += [i, s, decode(s)].join(' ') + '\n';
}
<pre id="out"></pre>