将列索引转换为相应的列字母

BeN*_*ErR 66 javascript indexing google-sheets google-apps-script

我需要将Google Spreadsheet列索引转换为相应的字母值,例如,给定电子表格:

在此输入图像描述

我需要这样做(这个功能显然不存在,这是一个例子):

getColumnLetterByIndex(4);  // this should return "D"
getColumnLetterByIndex(1);  // this should return "A"
getColumnLetterByIndex(6);  // this should return "F"
Run Code Online (Sandbox Code Playgroud)

现在,我不记得索引是从起点0还是起点1,无论如何,概念应该是清楚的.

我没有在气体文件上找到任何关于这个的东西..我是瞎了吗?任何的想法?

谢谢

Ada*_*amL 118

我为了各种目的而写了一段时间(将返回列号> 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议将 `column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);` 更改为 `column += (letter.toUpperCase().charCodeAt(i) - 64) * Math.pow(26, length - i - 1);` 如果 `letter` 包含小写字母,则使其工作,否则对于 `a` 它将输出 `33` 而不是 `1` (2认同)

wro*_*nex 58

这很好用

=REGEXEXTRACT(ADDRESS(ROW(); COLUMN()); "[A-Z]+")
Run Code Online (Sandbox Code Playgroud)

即使是Z以外的列.

演示功能

只需更换COLUMN()您的列号即可.价值ROW()无关紧要.

  • 这非常有效.即使这不使用GAS(标记问题),内置函数几乎总是更好,因为它们根本不需要编写,而且根据我的经验,运行速度要快得多. (9认同)
  • 你使用的是公式,而不是GAS (3认同)

Ond*_*žka 32

=SUBSTITUTE(ADDRESS(1,COLUMN(),4), "1", "")
Run Code Online (Sandbox Code Playgroud)

这需要你的单元格,获取它的地址,例如C1,并删除"1".

在此输入图像描述

这个怎么运作

  • COLUMN() 给出单元格列的编号.
  • ADDRESS(1, ..., <format>)给出一个单元格的地址,格式为<format>参数.4表示您知道的地址 - 例如C1.
  • 最后,SUBSTITUTE(..., "1", "")替换1地址C1,所以你留下了专栏信.

  • 问题是要求在脚本中使用一个函数,而此解决方案提供了一个在单元格中使用的公式。 (3认同)
  • 这是一个优雅的解决方案 - 我最喜欢它.不知道为什么它没有更多的upvotes. (2认同)

小智 17

这个工作在区间AZ

= CHAR(64 +柱())

  • 对于没有编程背景并且不会在“Z”(即“AA”)以外的列上工作的人来说,这非常棘手,但我还是喜欢它,因为它是最短和最快的计算(例如,您可以有 1,000这些立即运行,而您的计算机不会出汗)。 (4认同)

Tom*_*nen 13

无需在此重新发明轮子,请改用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"
Run Code Online (Sandbox Code Playgroud)


Pas*_*lly 7

在 JavaScript 中:

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')
Run Code Online (Sandbox Code Playgroud)