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

IT技术 javascript google-apps-script indexing google-sheets
2021-02-07 12:26:28

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

在此处输入图片说明

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

getColumnLetterByIndex(4);  // this should return "D"
getColumnLetterByIndex(1);  // this should return "A"
getColumnLetterByIndex(6);  // this should return "F"

现在,我不记得索引是从0还是从开始1,反正这个概念应该很清楚。

我在燃气文档上没有找到任何关于此的信息..我是瞎子吗?任何的想法?

谢谢

6个回答

我出于各种目的写了这些(将返回列号 > 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;
}
如果包含小写字母,我建议更改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
2021-03-13 12:26:28
我认为String.fromCharCode不适用于 Apps 脚本
2021-03-16 12:26:28
最大值小于ZZ吗?
2021-03-19 12:26:28
只是用这个增量列编号:var column = letterToColumn(AA); columnToLetter(column + 1);可能对某人有帮助。
2021-04-03 12:26:28

这很好用

=REGEXEXTRACT(ADDRESS(ROW(); COLUMN()); "[A-Z]+")

即使对于超出 Z 的列。

功能演示

只需替换COLUMN()为您的列号。的值ROW()无所谓。

这真的很好用。即使这不使用 GAS(用它标记问题),内置函数几乎总是更可取的,因为它们根本不需要编写,并且根据我的经验,运行速度要快得多。
2021-03-28 12:26:28
您使用的是公式,而不是 GAS
2021-04-05 12:26:28
=SUBSTITUTE(ADDRESS(1,COLUMN(),4), "1", "")

这需要您的单元格,获取它的地址,例如 C1,并删除“1”。

在此处输入图片说明

怎么运行的

  • COLUMN() 给出单元格的列数。
  • ADDRESS(1, ..., <format>)<format>参数指定的格式给出单元格的地址4表示您知道的地址 - 例如C1
    • 行在这里无关紧要,所以我们使用1.
    • 查看ADDRESS文档
  • 最后,SUBSTITUTE(..., "1", "")替换1address 中的C1,因此您只剩下列字母。
我想知道多于一位数字的行(即第 10 行及以下)会发生什么。subtiute 会很好用吗?
2021-03-17 12:26:28
问题是要求一个在脚本中使用的函数,而这个解决方案提供了一个在单元格中使用的公式。
2021-03-27 12:26:28
我在尝试时得到了这个:screencast.com/t/Jmc8L9W5LB我想通了这一点。我通过用分号替换所有逗号来解决它。这可能是一个本地化问题
2021-03-31 12:26:28
@David,它对我有用逗号。也许是因为语言环境设置。
2021-04-04 12:26:28

无需在这里重新发明轮子,而是使用 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"

developer.google.com/apps-script/reference/spreadsheet/...该方法的签名是第一个参数的整数,您传递的是一个字符串,因此错误。首先将其转换为整数或检查您是否将正确的变量作为参数传递。
2021-03-26 12:26:28
我越来越 Exception: The parameters (String,number,number,number) don't match the method signature for SpreadsheetApp.Spreadsheet.getRange.
2021-04-06 12:26:28
这应该是公认的答案。您还可以通过 去除数字replace(/\d+/, '')
2021-04-10 12:26:28

这适用于范围 A-Z

=char(64+column())

不幸的是,这个答案是一个表格公式,不能在 GAS 中使用。
2021-03-26 12:26:28
对于没有编程背景并且不会在“Z”(即“AA”)以外的列上工作的人来说,这非常棘手,但我还是喜欢它,因为它是最短和最快的计算(例如,您可以有 1,000这些立即运行,而您的计算机不会出汗)。
2021-03-27 12:26:28