Excel: convertire il nome di una cella in indici di colonna e riga

Quando si utilizza Microsoft Excel per manipalore i valori delle celle da codice managed può essere conveniente accedere ai valori contenuti nelle celle attraverso indici colonna/riga invece dei classici lettera e numero (A1, AB52, etc).
Ecco quindi una funzione di utilità per convertire da notazione Excel-like a indici colonna e riga:

protected static int[] ConvertCellNameToColumnRow(string cellName)
{
   int maxIntLetter = 26; // ABCD...K...WXYZ
   int asciiLetterA = 65;
   int maxColumnIndex = 255;
   string row = "";
   string col = "";
   char[] arr = cellName.ToCharArray();

   // separo la parte letterale e numerica dal nome della cella
   for (int i = 0; i < arr.Length; i++)
   {
      if (!Char.IsLetter(arr[i]))
      {
         row = cellName.Substring(i, arr.Length - i);
         col = cellName.Substring(0, i);
         break;
      }
   }
   
   // calcolo il numero della riga
   int rowIndex = 0;
   CharEnumerator enumerator = row.GetEnumerator();
   while (enumerator.MoveNext())
   {
      char number = enumerator.Current;
      if (!Char.IsDigit(number))
      {
         throw new ApplicationException("Nome cella non valido");
      }
   }
    
   // in excel l'indice delle righe comincia da zero
   rowIndex = Convert.ToInt32(row) - 1;

   // calcolo il numero della colonna
   int colIndex = 0;
   foreach (char c in col.ToCharArray())
   {
       colIndex += (((colIndex * (maxIntLetter - 1)) + (int)c) - asciiLetterA) + 1;
   }
   colIndex--; // in excel l'indice delle righe comincia da zero
   if (!(colIndex > 0 && colIndex <= maxColumnIndex))
   {
      // Il numero massimo di colonne in Excel è 256
      throw new ApplicationException("Nome cella non valido");
   }

   return new int[] { colIndex, rowIndex };
}