[google-apps-script] Konvertieren Sie den Spaltenindex in den entsprechenden Spaltenbuchstaben



Answers

Das funktioniert gut

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

auch für Spalten jenseits von Z.

Ersetzen COLUMN() einfach COLUMN() durch Ihre Spaltennummer. Der Wert von ROW() spielt keine Rolle.

Question

Ich muss einen Google Spreadsheet-Spaltenindex in den entsprechenden Buchstabenwert umwandeln, z. B. bei einer Tabelle:

Ich muss das tun (diese Funktion existiert offensichtlich nicht, es ist ein Beispiel):

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

Nun, ich weiß nicht genau, ob der Index von 0 oder von 1 beginnt, jedenfalls sollte das Konzept klar sein.

Ich habe nichts darüber in der Gasdokumentation gefunden. Bin ich blind? Irgendeine Idee?

Vielen Dank




Hier ist eine null-indexierte Version (in Python):

letters = []
while column >= 0:
    letters.append(string.ascii_uppercase[column % 26])
    column = column // 26 - 1
return ''.join(reversed(letters))



diese Arbeit auf Intervall AZ

= char (64 + Spalte ())




Ich war auch auf der Suche nach einer Python-Version hier ist meine, die auf Python 3.6 getestet wurde

def columnToLetter(column):
    character = chr(ord('A') + column % 26)
    remainder = column // 26
    if column >= 26:
        return columnToLetter(remainder-1) + character
    else:
        return character



Java Apache POI

String columnLetter = CellReference.convertNumToColString(columnNumber);



Hier ist eine allgemeine Version in Scala geschrieben. Es ist für einen Spaltenindex, der bei 0 beginnt (es ist einfach, für einen Indexanfang bei 1 zu modifizieren):

def indexToColumnBase(n: Int, base: Int): String = {
  require(n >= 0, s"Index is non-negative, n = $n")
  require(2 <= base && base <= 26, s"Base in range 2...26, base = $base")

  def digitFromZeroToLetter(n: BigInt): String =
    ('A' + n.toInt).toChar.toString

  def digitFromOneToLetter(n: BigInt): String =
    ('A' - 1 + n.toInt).toChar.toString

  def lhsConvert(n: Int): String = {
    val q0: Int = n / base
    val r0: Int = n % base

    val q1 = if (r0 == 0) (n - base) / base else q0
    val r1 = if (r0 == 0) base else r0

    if (q1 == 0)
      digitFromOneToLetter(r1)
    else
      lhsConvert(q1) + digitFromOneToLetter(r1)
  }

  val q: Int = n / base
  val r: Int = n % base

  if (q == 0)
    digitFromZeroToLetter(r)
  else
    lhsConvert(q) + digitFromZeroToLetter(r)
}

def indexToColumnAtoZ(n: Int): String = {
  val AtoZBase = 26
  indexToColumnBase(n, AtoZBase)
}



Related